2013-03-21 80 views
0

我是新來的java,我想知道如何做一些我在面試問題中被問到的問題。正在按順序運行的線程

您有三個主題T1,T2T3
你如何確保他們按順序完成T1T2T3
採訪者要求我寫它的程序。
我知道這個問題可以通過joincount down latch的概念來回答,但是有些我沒能成功。 請問你們可以告訴我如何去做這件事?

回答

4

創建3個線程,但不啓動它們,然後轉到如下

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

的Thread.join等待線程終止,所以爲了保證

+0

它不會將主線程連接到這些(t1,t2和t3),而不是將t3連接到t2並將t2連接到t2。我試過了,不知何故它每次都有效。任何解釋? – EMM 2014-10-06 16:41:45

0

這樣做有很多種方法。最簡單的辦法是使用Thread.join,這將導致當前線程暫停,直到你在完成調用join()螺紋:

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

然後,你可以有T3在T2連接,而T2的T1連接。

但是如果我是你,我會問採訪者爲什麼他們希望線程按這個順序完成。是因爲T3消耗T2產生的東西嗎?如果是這樣,像concurrent queue這樣的東西可能會更好,因爲它不那麼脆弱 - 您可以更改哪個線程執行消耗或生成事物的工作,而不會中斷任何事情。哎呀,生產者/消費者線程可以設置爲從來沒有完成,而是有一個生產儘可能快,另一個消耗盡可能快。線程全部關於而不是瞭解事情發生的順序,除了某些接觸點(例如準備消耗的東西)之外。

所以基本上,提出的問題有點虛假。

1

對我來說,這是一個有趣的問題。我會問面試官他爲什麼要他們按照特定的順序完成。坦率地說,我看不到任何情況下,我希望單獨的線程以特定的順序完成,而不是等待它的子節點的主線程。

+0

面試官想要測試我,請告知 – user2174651 2013-03-21 08:11:27

+1

如果唯一的要求是線程完成在一個特定的orden,那麼Evgeniy答案是一個可行的解決方案。然而,僱主傾向於希望員工在需求不明確或者設計解決方案低於標準時自己做出自己的想法並大聲說出來。在我的書中,設計有效解決方案的能力比直接瞭解特定界面更重要。 javadoc中提供了一個接口的細節。學習如何編寫有效的解決方案非常困難,需要經驗和才能。 – 2013-03-21 13:14:17

0

如果線程按順序完成,那麼爲什麼不把所有三個線程的代碼放在1線程的運行?