- java.lang.Object
-  
      - java.util.concurrent.ExecutorCompletionService<V>
 
-  
       - All Implemented Interfaces:
-  
         CompletionService<V>
 
 
 public class ExecutorCompletionService<V> extends Object implements CompletionService<V> ACompletionService使用提供的Executor执行任务。 此类安排提交的任务完成后,可以使用take访问队列。 该类具有足够的轻量级,适合于处理任务组时的瞬时使用。用法示例。 假设你有一组解决者为某个问题,每个返回一个值类型 Result,并希望同时运行它们,处理其中返回一个非空值的结果,在某些方法use(Result r)。 你可以这样写:void solve(Executor e, Collection<Callable<Result>> solvers) throws InterruptedException, ExecutionException { CompletionService<Result> cs = new ExecutorCompletionService<>(e); solvers.forEach(cs::submit); for (int i = solvers.size(); i > 0; i--) { Result r = cs.take().get(); if (r != null) use(r); } }void solve(Executor e, Collection<Callable<Result>> solvers) throws InterruptedException { CompletionService<Result> cs = new ExecutorCompletionService<>(e); int n = solvers.size(); List<Future<Result>> futures = new ArrayList<>(n); Result result = null; try { solvers.forEach(solver -> futures.add(cs.submit(solver))); for (int i = n; i > 0; i--) { try { Result r = cs.take().get(); if (r != null) { result = r; break; } } catch (ExecutionException ignore) {} } } finally { futures.forEach(future -> future.cancel(true)); } if (result != null) use(result); }- 从以下版本开始:
- 1.5
 
-  
        
       -  
             构造方法摘要构造方法 Constructor 描述 ExecutorCompletionService(Executor executor)使用提供的执行程序创建一个ExecutorCompletionService,用于执行基本任务,一个LinkedBlockingQueue作为完成队列。ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)使用提供的执行程序创建一个ExecutorCompletionService,用于执行基本任务,并将提供的队列作为其完成队列。
 -  
             方法摘要所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 Future<V>poll()检索并删除代表下一个完成的任务的未来,或者如果没有,任务将null。Future<V>poll(long timeout, TimeUnit unit)检索并删除表示下一个完成的任务的未来,如果还没有,则等待必要时直到指定的等待时间。Future<V>submit(Runnable task, V result)提交一个可运行的任务执行,并返回一个表示该任务的未来。Future<V>submit(Callable<V> task)提交值返回任务以执行,并返回代表任务待处理结果的Future。Future<V>take()检索并删除代表下一个完成任务的未来,等待是否还没有任务。
 
-  
             
-  
        
       -  
             构造方法详细信息-  ExecutorCompletionServicepublic ExecutorCompletionService(Executor executor) 使用提供的执行程序创建一个ExecutorCompletionService来执行基本任务,一个LinkedBlockingQueue作为完成队列。- 参数
-  
              executor- 执行者使用
- 异常
-  
              NullPointerException- 如果执行人是null
 
 -  ExecutorCompletionServicepublic ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue) 使用提供的执行程序创建一个ExecutorCompletionService,用于执行基本任务,并将提供的队列作为其完成队列。- 参数
-  
              executor- 执行者使用
-  
              completionQueue- 用作完成队列的队列通常由该服务专用。 该队列被视为无限制的尝试Queue.add完成的任务的操作导致它们不可检索。
- 异常
-  
              NullPointerException- 如果executor或completionQueue是null
 
 
-  
 -  
             方法详细信息-  submitpublic Future<V> submit(Callable<V> task) 说明从接口CompletionService复制提交值返回任务以执行,并返回代表任务待处理结果的Future。 完成后,可以采取或轮询此任务。- Specified by:
-  
              submit在接口CompletionService<V>
- 参数
-  
              task- 要提交的任务
- 结果
- 一个未来的代表,待完成任务
 
 -  submitpublic Future<V> submit(Runnable task, V result) 说明从界面CompletionService复制提交一个可运行的任务执行,并返回一个表示该任务的未来。 完成后,可以采取或轮询此任务。- Specified by:
-  
              submit在接口CompletionService<V>
- 参数
-  
              task- 要提交的任务
-  
              result- 成功完成后返回的结果
- 结果
- 
               未来任务的完成,其 
              get()方法将在完成后返回给定的结果值
 
 -  takepublic Future<V> take() throws InterruptedException 说明从界面CompletionService复制检索并删除代表下一个完成任务的未来,等待是否还没有任务。- Specified by:
-  
              take在接口CompletionService<V>
- 结果
- 未来代表下一个完成的任务
- 异常
-  
              InterruptedException- 如果在等待时中断
 
 -  pollpublic Future<V> poll() 说明从界面CompletionService复制检索并删除代表下一个完成的任务的未来,或者如果没有的话,则null。- Specified by:
-  
              poll在接口CompletionService<V>
- 结果
- 
               未来代表下一个完成的任务,或 
              null如果没有)
 
 -  pollpublic Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException 说明从接口CompletionService复制检索并删除表示下一个完成的任务的未来,如果还没有,则等待必要时直到指定的等待时间。- Specified by:
-  
              poll在接口CompletionService<V>
- 参数
-  
              timeout- 放弃之前等待多长时间,以unit为单位
-  
              unit- aTimeUnit确定如何解释timeout参数
- 结果
- 
               未来代表下一个完成的任务或 
              null如果指定的等待时间过去之前存在
- 异常
-  
              InterruptedException- 如果在等待时中断
 
 
-  
 
-