主线程等待其他线程

时间:2014-11-10 00:31:15

标签: java multithreading

经过大量的搜索而没有找到具体的答案

如果我有两个线程开始:

Thread t1 = new Thread();
Thread t2 = new Thread();

t1.start();
t2.start();

启动线程后,我需要主线程等待这两个线程完成后再打印最终结果

如何让主线程等待t1和t2?

普通wait()就够了吗?

4 个答案:

答案 0 :(得分:9)

添加

t1.join();
t2.join();

在你的帖子里应该等到t1t2完成他们的任务(在你的情况下从你的主线程中调用它)。

答案 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()是等待线程完成。