经过大量的搜索而没有找到具体的答案
如果我有两个线程开始:
Thread t1 = new Thread();
Thread t2 = new Thread();
t1.start();
t2.start();
启动线程后,我需要主线程等待这两个线程完成后再打印最终结果
如何让主线程等待t1和t2?
普通wait()
就够了吗?
答案 0 :(得分:9)
添加
t1.join();
t2.join();
在你的帖子里应该等到t1
和t2
完成他们的任务(在你的情况下从你的主线程中调用它)。
答案 1 :(得分:7)
答案取决于......
使用CountDownLatch
这可能是最简单的解决方案。
这样你只需在锁存器上wait
,直到它被指示了规定的次数(每个Thread
终止)。当你增加线程数时,这可以很好地扩展...
使用join
,但添加更多主题
将每个Thread
添加到List
,遍历列表,删除那些不再存在的线程并继续循环,直到List
为空,但是那个' sa相当沉重的方法。
将上述解决方案与loop
wait
Thread
notify
ExecutorService
invokeAll
shutdown
完成后的某种监视器锁相结合,但是不太清洁,你仍然可能最终等待不存在的线程......
使用Thread
并使用{{1}}和/或{{1}}方法。有关详细信息,请参阅Executors。这也可以很好地扩展,甚至还有一个额外的好处,即允许您使用{{1}}池来更好地管理系统资源
答案 2 :(得分:2)
查看Thread#join方法。
此外,您可能会发现使用ExecutorService(和朋友)很有帮助。它本质上是线程池/管理,并提供了许多便利和IMO比线程更干净的API。进入障碍很低......
答案 3 :(得分:1)
你想要Thread#join()
。 wait()
用于发送信号,join()
是等待线程完成。