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();
答案 0 :(得分:2)
我认为没有任何好处。公共界面的唯一区别是FutureTask
实现RunnableFuture
除了Future
方法之外,您还可以通过RunnableFuture.run()
方法运行任务,但我怀疑您是否会需要直接运行它。
直接使用FutureTask
类的主要目的是为其提供子类,为某些受保护的方法(如done()
或setException()
提供自定义实现)。所以在下面的代码中有意义:
Callable<Integer> myComputation = () -> {return 0;};
FutureTask<Integer> task = new FutureTask<Integer>(myComputation) {
@Override
protected void done() {
// some custom action on task completion
}
};