Future设计的思想
避免等待线程结果造成堵塞,通过提交任务后返回Future,来异步管理任务的计算结果。
Future的源码
public interface Future<V>{
//尝试取消执行任务,任务已完成或已经取消,或者其它不能取消的原因 返回false,
//如果返回true,任务将不会再执行。
//mayInterruptIfRunning 决定正在执行的任务是否应该通过interrupted来停止任务
boolean cancel (boolean mayInterruptIfRunning);
//任务正常完成前被取消了 则返回true
boolean isCancelled();
//任务正常结束 或者异常 或者被取消 都会返回true
boolean isDone();
//返回结算的结果,如果任务没执行完,等待直到获取到结果
V get() throws InterruptedException, ExecutionException;
// 设置获取结果最长的等待时间,在此时间内完成都会返回结果,否则抛出异常
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
Future使用举例
返回的结果 关键就是Callable接口中执行后返回结果。
interface ArchiveSearcher{
String search(String target);
}
class App {
ExecutorService executor = ...
ArchiveSearcher searcher = ...
void showSearch(final String target)throws InterruptedException {
Future<String> future = executor.submit(new Callable<String>() {
public String call() {
return searcher.search(target);
}
});
displayOtherThings(); // do other things while searching
try {
displayText(future.get()); // use future
}catch (ExecutionException ex) {
cleanup();
return;
}
}
}
网友评论