重庆找网站推广,sem是什么职业岗位,推广方式有哪些,怎么建设自己网站首页Future源码解读〇、[源码版本] jdk 1.8一、Future概述[举例1]示例代码[举例2]示例代码内存一致性影响二、Future接口的方法cancel方法isCancelled方法isDone方法get方法〇、[源码版本] jdk 1.8
一、Future概述
Future表示异步计算的结果。提供了检查计算是否完成、等待计算完…
Future源码解读〇、[源码版本] jdk 1.8一、Future概述[举例1]示例代码[举例2]示例代码内存一致性影响二、Future接口的方法cancel方法isCancelled方法isDone方法get方法〇、[源码版本] jdk 1.8
一、Future概述
Future表示异步计算的结果。提供了检查计算是否完成、等待计算完成以及检索计算结果的方法。
结果只能在计算完成后使用方法get取回必要时阻塞直到它准备好。
取消由cancel方法执行。
提供了其他方法来确定任务是正常完成还是被取消。计算一旦完成就不能取消计算。
如果您想使用Future来实现可取消性但不提供可用结果您可以声明Future?形式的类型并返回null作为基础任务的结果。
[举例1]示例代码 interface ArchiveSearcher { String search(String target); }class App {ExecutorService executor ...ArchiveSearcher searcher ...void showSearch(final String target) throws InterruptedException {FutureString future executor.submit(new CallableString() {public String call() {return searcher.search(target);}});displayOtherThings(); // 在处理search的时候异步处理其他事try {displayText(future.get()); // 使用future} catch (ExecutionException ex) { cleanup(); return; }}}FutureTask类是Future的实现它实现了Runnable因此可以由Executor执行。例如上面带有submit的构造可以替换为
[举例2]示例代码
FutureTaskString future new FutureTaskString(new CallableString() {public String call() {return searcher.search(target);}});executor.execute(future);内存一致性影响
异步计算采取的动作内存可见性发生在另一个线程中对应Future.get()的操作之前。
二、Future接口的方法
cancel方法
boolean cancel(boolean mayInterruptIfRunning);尝试取消此任务的执行。
如果任务已完成、已被取消、或由于某些其他原因无法取消则此尝试将失败。
如果成功并且在调用cancel时此任务尚未启动此任务不应运行。
如果任务已经开始那么mayInterruptIfRunning参数确定执行此任务的线程是否应该在尝试停止任务时被中断。
a.参数 mayInterruptIfRunning 执行此任务的线程是否应该被中断否则允许进行中的任务完成 b.返回 true 任务取消执行 false 如果任务无法取消通常是因为它已经正常完成 c.异常无
isCancelled方法
boolean isCancelled();如果此任务在正常完成之前被取消则返回true。
a.参数无 b.返回 true 如果此任务在正常完成之前被取消 c.异常无
isDone方法
boolean isDone();如果此任务完成则返回true。完成可能是由于正常终止、异常或取消——在所有这些情况下此方法将返回true。
a.参数无 b.返回 true 如果此任务完成 c.异常无
get方法
V get() throws InterruptedException, ExecutionException;如有必要等待计算完成然后取回其结果。
a.参数无 b.返回 V 计算结果 c.异常 throws CancellationException 如果计算被取消 throws ExecutionException 如果计算抛出异常 throws InterruptedException 如果当前线程在等待时被中断
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;如有必要最多等待给定的计算时间完成然后取回其结果如果可用。
a.参数 timeout 最长等待时间 unit 超时参数timeout的时间单位 b.返回 V 计算结果 c.异常 throws CancellationException 如果计算被取消 throws ExecutionException 如果计算抛出异常 throws InterruptedException 如果当前线程在等待时被中断 throws TimeoutException 如果等待超时