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