我用谷歌搜索了这个,但仍然无法得到充分的理解。我找不到任何使用的特定示例FutureTask(Runnable runnable, V result)
构造函数
Java 文档说
未来提交(可运行任务,
T结果)
提交一个 Runnable 任务来执行并返回一个 Future
代表该任务。Future 的 get 方法将返回给定的
成功完成后的结果。
看着这个我的理解是任务完成后 futureTask.get() 它将给我们发回given传递的结果对象与“可运行”作业无关。这是“可运行”作业已完成的信号。
任何具体的用例或任何现实生活中的例子都会非常有帮助
另外结合 Enno 的回答,它与可能在循环中使用 isdone() 有何不同。
Edited另外为什么不等待通知呢?
因此,这是源自现实生活中的用例,尽管它可能不代表标准用法。基本上,我正在调整返回可运行的现有代码。
LocalService manager = ...; // this is not thread safe
CompletionService exec = new ExecutorCompletionService( ... );
List<URL> work = ...;
for( URL url : work ) {
// this is existing code returning Runnable
Runnable task = createTaskFor(url);
exec.submit(task, url);
}
// we will report the URLs in the order they complete
for( int i = 0; i < work.size(); i++) {
URL completed = exec.take();
// manager isn't thread safe, so all calls to it are on this thread
manager.reportCompleted(completed);
}
所以就这样吧。我只用过一次。与CompletionService
,因为这允许任务生成和任务完成解耦,但仍然可以通信。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)