Future

作者: 萍水相逢_程序员 | 来源:发表于2018-09-15 11:22 被阅读0次

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;
        
        }
      }
  }
  

相关文章

网友评论

      本文标题:Future

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