美文网首页
Java 8 Future

Java 8 Future

作者: 风吟空城 | 来源:发表于2019-03-06 15:37 被阅读0次

Future<V> 接口

public interface Future<V>

泛型参数

V : Future接口中get()方法返回的结果。

简述

Future表示的是异步计算的结果。接口本身提供了很多方法,如:

  • 检测计算是否完成 isDone()
  • 等待计算完成,然后检索计算结果 get()

异步计算完成后,计算结果只能通过调用get()方法检索获取。如果需要等待一段时间之后,再来获取计算结果,可以使用get(long timeout, TimeUnit unit)

如果想要取消正在执行的计算,需要调用取消方法-cancel(bool mayInterruptIfRunning)。如果异步计算已经完成,计算就不能被取消。Future还提供了其他方法来确定异步计算是否已正常完成-isDone()或已被取消-isCancelled()。如果仅仅为了使用Future的可取消性,而不是提供可用的结果。那么可以声明Future<?>并返回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

FutureTask实现了Runnable和Future接口,因此FutureTask可以由执行器执行。
例如,上面代码中submit构造参数代码可以用下面的代码替代。代码如下:

FutureTask<String> future =
   new FutureTask<String>(new Callable<String>() {
     public String call() {
       return searcher.search(target);
   }});
executor.execute(future);

相关文章

网友评论

      本文标题:Java 8 Future

      本文链接:https://www.haomeiwen.com/subject/mjukuqtx.html