4

FutureTask 包装器在简单的 Callable/Runnables 上提供了什么?我见过一些人以这种方式使用期货,但我不确定它真正为游戏增加了什么。

Callable<Integer> myComputation = () -> {return 0;};
FutureTask<Integer> task = new FutureTask<Integer>(myComputation);

//Why this...       
Executors.newSingleThreadExecutor().execute(task);
task.get();

//...over the conventional approach?
Future<Integer> future = Executors.newSingleThreadExecutor().submit(myComputation);
future.get();
4

1 回答 1

2

我看不出有什么好处。公共接口的唯一区别是除了方法之外的FutureTask实现还允许您通过方法运行任务,但我怀疑您是否需要直接运行它。RunnableFutureFutureRunnableFuture.run()

直接使用该类的主要目的FutureTask是能够对它进行子类化,为某些受保护的方法(如done()or )提供自定义实现setException()。所以这在下面的代码中是有意义的:

Callable<Integer> myComputation = () -> {return 0;};
FutureTask<Integer> task = new FutureTask<Integer>(myComputation) {
    @Override
    protected void done() {
        // some custom action on task completion
    }
};
于 2015-11-30T03:46:52.160 回答