美文网首页
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