【发布时间】:2011-04-25 04:02:29
【问题描述】:
我不能使用shutdown() 和awaitTermination(),因为它可能会在等待时将新任务添加到 ThreadPoolExecutor。
所以我正在寻找一种方法,等待 ThreadPoolExecutor 清空它的队列并完成它的所有任务,而不停止在此之前添加新任务。
如果有什么不同,这适用于 Android。
谢谢
更新:很多周后,我重新审视了这个,发现修改后的 CountDownLatch 在这种情况下更适合我。我会保留答案,因为它更适用于我的问题。
【问题讨论】:
-
如果您对添加的新任务感到满意,但如果它永远不会完成会发生什么?
-
我认为 littleFluffyKitty 只想等待“旧”任务完成。
-
我不太担心它永远不会完成的可能性,因为如果是这样的话,那么其他东西已经被严重破坏了。如果一切都失败了,我可以实施某种时间,但我可以假设它会完成。我希望它能够在等待时执行新任务,或者换句话说,我希望在调用等待后能够添加新任务。
-
我认为这是一个相关的问题:stackoverflow.com/questions/3402895/java-threadpool-usage。您可能想查看那里列出的答案...
-
我提供了另一个可能的答案。我还是不明白你说的等待所有任务清空队列但又不想阻止新任务进入队列是什么意思……在某些时候,你必须画线,而TPE无法画线给你的线。调用
shutdown()是创建无法提交新任务的“边缘”的方式;调用awaitTermination()会创建一个优势,确保您阻塞直到所有先前提交的任务都完成。
标签: java android multithreading wait threadpoolexecutor