Java 并发:在处理过程中如何判断哪个 Future 属于哪个 Callable



我有一个可调用对象和一个ExecutorService的集合。 当我调用All时,我得到一个未来对象的列表。 在 Future 完成之前,如何判断哪个 Future 对象映射到哪个 Callable? 事后我可以说,因为

法典:

 ExecutorService es = .....;
 Collection<Callables> uniqueCallables = .....;  // each Callable is unique!
 List<Future> futures = es.invokeAll(uniqueCallables);
 // TODO--find unique Future A which is the future for Callable A!

根据 Java 参考,invokeAll(uniqueCallables)List<Future> 中的顺序保留为 uniqueCallables.iterator() 生成的顺序:

退货: 代表任务的期货列表,在同一 迭代器为给定任务列表生成的顺序, 每个都已完成。

听起来你只需要能够从未来中查找原始可调用对象。如果你没有使用 invokeAll,你可以装饰包装 submit() 的 Executor,以创建一个 ContextualFuture,保留对原始可调用对象的引用。

/*pseudo example*/
class ContextualFuture<RETURN> implements Future<RETURN> {
   private Callable<RETURN> callable;
   private Future<RETURN> wrappedFuture;
   public ContextualFuture(Callable<RETURN> callable, Future<RETURN> future){
       this.callable = callable;
       this.future = future;
   }
   // implemented/wrapped methods 
}
class ContextualThreadPool {
   private ExecutorService wrappedExecutor;
   public <T> ContextualFuture<T> submit(Callable<T> task){
       Future<T> f = wrappedExecutor.submit(task);
       return new ContextualFuture<T>(task, f);
   }
}

相关内容

  • 没有找到相关文章

最新更新