Java文档:并发库(二)【接口:Future接口族】

Future接口:
一个Future实例代表了一个异步操作(asynchronous computation)的结果。它的方法可以检查操作是否结束,是否在等待结束,检索操作的结果。操作结果只能用get方法来获得,该方法会一直
阻塞直到其准备好(获得结果)。cancel方法中止(取消)任务。附加的方法可以判断任务是正常结束或者被取消。一旦操作结束,操作就无法被取消。如果你想用一个Future实例取消操作但是没有
提供可用的结果,你可以用格式Futrue<?>来申明实例,并且返回null作为结果。
示例:(注意:示例中的类都是为演示而制作的)
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; }
   }
 }
下面FutureTask类是一个实现了Runnable接口的Future实现类,所以可以直接用Executor执行。比如上面用submit提交的任务可以用下面的代码替代:
 FutureTask<String> future =
       new FutureTask<String>(new Callable<String>() {
         public String call() {
           return searcher.search(target);
       }});
     executor.execute(future);
//future.get()...
主要方法:
boolean cancel(boolean mayInterruptIfRunning):尝试中止关联任务的执行。如果关联任务已经结束、已经取消或者因为其他原因不能取消,则尝试中止会失败。如果成功,并且cancel调用的时候
关联任务还没有开始执行,则该任务将不再执行。如果任务已经开始,mayInterruptIfRunning参数指明了是否执行任务的线程在尝试停止时中断线程。
本方法返回后,随后调用的isDone()将一直返回true。如果本方法返回true,则isCancelled()将一直返回true。
参数:mayInterruptIfRunning - true 是否执行任务的线程中断;其他情况下,执行中的任务允许完成。
返回值:false 任务不能被中止,一般是因为它即将正常完成;其他情况下返回true
boolean isCancelled():如果任务在完成前就被中止则返回true
boolean isDone():如果任务完成则返回true。“完成”应该是正常结束(normal termination)、一个异常或者取消(中止cancellation),以上情况下都返回true。
V get() throws CancellationException,InterruptedException,ExecutionException:
V get(long timeout,TimeUnit unit)throws CancellationException,InterruptedException,ExecutionException,TimeoutException:
等待任务执行完成,并且获取返回结果(类型为V)


实现类:FutureTask<T>
该实现类是同时实现了Runnable和Future接口,用法如上面的例子。可以通过set方法为他设置任务执行完后的返回结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值