我是java新手,我想知道如何做一些我在面试问题中被问到的事情。
您有三个帖子T1
,T2
和T3
您如何确保按顺序完成T1
,T2
,T3
采访者让我写上程序。
我知道这个问题可以通过join
或count down latch
的概念来回答,但有些问题是我无法取得成功的。
你能告诉我怎么做这个吗?
答案 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个线程的运行中?