java - 如何在不关闭 Executor 的情况下等待 ThreadPoolExecutor 中的所有任务完成?

标签 java android multithreading wait threadpoolexecutor

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

所以我正在寻找一种方法,等待 ThreadPoolExecutor 清空它的队列并完成它的所有任务,而不停止在此之前添加新任务。

如果有什么不同,这适用于 Android。

谢谢

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

最佳答案

如果您想知道某个任务或某批任务何时完成,您可以使用ExecutorService.submit(Runnable)。调用此方法会返回一个 Future 对象,该对象可以放入一个 Collection 中,然后您的主线程将在调用 Future.get() 时对其进行迭代每一个。这将导致您的主线程暂停执行,直到 ExecutorService 处理完所有 Runnable 任务。

Collection<Future<?>> futures = new LinkedList<Future<?>>();
futures.add(executorService.submit(myRunnable));
for (Future<?> future:futures) {
    future.get();
}

关于java - 如何在不关闭 Executor 的情况下等待 ThreadPoolExecutor 中的所有任务完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3929361/

相关文章:

ios - 如何等待 findObjectsInBackgroundWithBlock(在 Parse 中)完成然后运行 ​​MainThread?

java - 在多线程中调用重绘?

java - Apache FOP 小程序错误未知函数 : gatherContextInfo

java - matlab 日期字符串在 python scipy.io 中生成 java lang 字符串

java - 在 Java Streams 中按范围分组

android - 如何在 Android 中将可拖动的滚动条添加到 ScrollView / ListView ?

java - 无法从开始获得STORM NEW VERSION(1.0.1)中的消息

android - 膨胀类 fragment 时出错 - 重复 id/illegalargumentexception?

android - 如何在编辑文本中添加提示

java - 以编程方式将第二个 Selenium Grid 节点作为 Grid 进程中的另一个进程生成时出现 ParameterException