2013-03-16 65 views
1

我正在讀java線程的源代碼,有一點問題我不確定。 有兩個線程,主線程和工作線程是長時間消耗的線程,我要主線程等到工作線程死亡,所以我在工作線程上調用連接方法,在Thread源代碼中,主線程在工作線程中等待活着:當主線程退出線程連接方法

while (isAlive()) { 
      wait(0); 
     } 

當工作線程完成的工作和死亡,所以現在會發生什麼主線程?它是否通過線程調度器通過自動調用工作線程上的notifyAll方法來通知?

回答

1

由於加入線程調用wait()就像您在源代碼中看到的那樣,那麼目標線程必須調用notify()notifyAll來喚醒它。

如果您在Thread源代碼中的任何地方都看不到它,那麼它可能發生在不同的類,本地代碼或非公共JVM供應商實現代碼中。

但是,這是一個實現細節:當目標線程完成時,您可以肯定地返回join,如文檔中所述。

+0

好的,我明白了。謝謝。 – hiway 2013-03-16 03:29:07

0

你是什麼意思的主線程? 你正在實現Runnable還是你在課堂上做了幾個線程? 如果你提供了更多的代碼,可能可以幫助你。

0

從主線程中調用workerThread.join()將導致主線程暫停執行,直到workerThread終止。然後,主線程在join()調用之後移至下一個語句。

這是在Java教程的SimpleThreads示例中演示的。