如何等待 ThreadPoolExecutor 中的所有任务完成而不关闭 Executor?

2024-02-22

我不能使用shutdown() and awaitTermination()因为在等待时,新任务可能会被添加到 ThreadPoolExecutor 中。

因此,我正在寻找一种方法来等待 ThreadPoolExecutor 清空其队列并完成所有任务,而不会阻止在此之前添加新任务。

如果有什么区别的话,这是针对 Android 的。

Thanks

Update:许多周后,在重新审视此问题后,我发现在这种情况下,修改后的 CountDownLatch 对我来说效果更好。我会保留答案,因为它更适用于我提出的问题。


如果您有兴趣了解某个任务或某批任务何时完成,您可以使用ExecutorService.submit(Runnable)。调用该方法会返回一个Future可以放入一个对象Collection然后你的主线程将迭代调用Future.get()为每一个。这将导致您的主线程停止执行,直到ExecutorService已经处理了所有的Runnable tasks.

Collection<Future<?>> futures = new LinkedList<Future<?>>();
futures.add(executorService.submit(myRunnable));
for (Future<?> future:futures) {
    future.get();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何等待 ThreadPoolExecutor 中的所有任务完成而不关闭 Executor? 的相关文章

随机推荐