线程按顺序运行

时间:2013-03-21 07:59:04

标签: java multithreading

我是java新手,我想知道如何做一些我在面试问题中被问到的事情。

您有三个帖子T1T2T3 您如何确保按顺序完成T1T2T3 采访者让我写上程序。
我知道这个问题可以通过joincount down latch的概念来回答,但有些问题是我无法取得成功的。 你能告诉我怎么做这个吗?

4 个答案:

答案 0 :(得分:4)

创建3个线程但不启动它们,然后按以下步骤

t1.start();
t1.join();
t2.start();
t2.join();
t3.start();

Thread.join等待线程终止,因此保证订单

答案 1 :(得分:1)

对我而言,这是一个棘手的问题。我会问面试官为什么要他们按特定顺序完成。坦率地说,我看不出任何情况,我希望单独的线程以特定的顺序完成,而不是主线程等待它的孩子。

答案 2 :(得分:0)

有各种方法可以做到这一点。最简单的方法是使用Thread.join,这将导致当前线程暂停,直到您调用join()的线程完成为止:

someThread.join();
// the current thread won't continue until someThread completes

然后,您可以在T2上加入T3,在T1上加入T2。

但如果我是你,我会问面试官为什么他们希望线程按顺序完成。是因为T3消耗了T2产生的东西吗?如果是这样的话,像concurrent queue这样的东西可能会更好,因为它不那么脆弱 - 你可以改变哪个线程消耗或生成东西的工作没有破坏。哎呀,生产者/消费者线程可以设置为从不完成,而是让一个生产尽可能快,另一个消耗尽可能快。线程都是关于而不是知道事情发生的顺序,除了某些接触点(这些东西准备被消费)。

所以基本上,提出的问题有点虚假。

答案 3 :(得分:0)

如果线程应按顺序完成,那为什么不将所有三个代码放在1个线程的运行中?