我们可以从Java的Future对象中获取Callable对象吗?

时间:2018-06-19 11:31:08

标签: java future executorservice java.util.concurrent callable

我有一个可调用对象的列表,我正在使用这些对象来生成将来的对象的列表。我正在使用ExecutorService来同时完成Callable任务,并将结果存储为Future对象的列表。现在我想知道,有没有一种方法可以获取用于生成给定未来对象的原始可调用对象。

2 个答案:

答案 0 :(得分:1)

如果通过调用Future获得了ExecutorService.invokeAll(),则可以依靠javadoc中记录的顺序。

 * @return a list of Futures representing the tasks, in the same
 *         sequential order as produced by the iterator for the
 *         given task list, each of which has completed

答案 1 :(得分:0)

尽管您可以创建自己的callable

,但是默认实现没有提供此功能。
   import org.apache.commons.math3.util.Pair;

    class MyCallable implements Callable<Pair<Callable,MyObject>>{

        private MyService service;
        public String name;
        public MyCallable(MyService srevice,String name){
            this.srevice = srevice;
            this.name = name;

        }

        @Override
        public Pair<Callable,MyObject> call() throws Exception {
            return new Pair(this,service.doSomeStuff())
        }
    }

现在,将来在将来调用可调用对象时,您将可以访问可调用对象。 future.get().getFirst().name之类的东西会起作用。