【发布时间】:2013-09-02 03:21:21
【问题描述】:
我与Java's ForkJoinTask 分开了一个长期运行的计算。
Java's FutureTask 提供了一个模板方法done()。 Overriding this method allows for "registering a completion handler"。
是否可以为ForkJoinTask 注册完成处理程序?
我之所以这样问是因为我不想在我的应用程序中设置阻塞线程 - 但只要我通过调用 result = ForkJoinPool.invoke(myForkJoinTask) 或 result = ForkJoinPool.submit(myForkJoinTask).get() 检索计算结果,我的应用程序就会有一个阻塞线程。
【问题讨论】:
-
"...我不想阻塞线程..." -- 请详细解释。如果您有多个线程,something 必须等待完成才能收集结果并对其进行处理。
-
On “如果你有多个线程,则必须等待完成才能收集结果并对其进行处理。”这种假设不正确,因为如果您有多个线程,您可以让每个线程将其结果放入某个同步或原子数据结构中,并检查每个线程是否完整数据,然后触发任何新活动而无需额外的“等待”并收集线程”。
标签: java promise future fork-join completionhandler