我想知道是否有人有关于如何设置标志以指示所有线程何时完成运行的信息?
我有7个并发运行的线程但我需要设置一个标志来显示所有这些线程何时完成以运行更新数据库表的方法,以便它可以切换到其他服务。这是我第一次使用线程,所以如果有人能指出我正确的方向,那就太好了。
答案 0 :(得分:3)
您可以尝试使用CountDownLatch
。它将满足您的要求,您需要做的是,创建一个CountDownLatch实例,其count value
等于线程数。启动所有线程并在主线程中调用await
方法。在所有线程中都有CountDownLatch对象引用,并在完成自己的作业后调用每个线程中的countDown
方法。对于每个countDown方法,CountDownLatch计数值将减少。一旦达到zero
,调用await的方法就会被唤醒。 Note if any one of your thread fails to call countDown then await will never get wake-up
。
答案 1 :(得分:2)
使用join
方法等待每个线程完成执行。
for (Thread t : threads) {
t.join();
}
答案 2 :(得分:0)
如果您直接使用线程,请查看CountDownLatch。根据工作流程的复杂程度,您可能更喜欢Phaser。