我正在讀java線程的源代碼,有一點問題我不確定。 有兩個線程,主線程和工作線程是長時間消耗的線程,我要主線程等到工作線程死亡,所以我在工作線程上調用連接方法,在Thread源代碼中,主線程在工作線程中等待活着:當主線程退出線程連接方法
while (isAlive()) {
wait(0);
}
當工作線程完成的工作和死亡,所以現在會發生什麼主線程?它是否通過線程調度器通過自動調用工作線程上的notifyAll方法來通知?
我正在讀java線程的源代碼,有一點問題我不確定。 有兩個線程,主線程和工作線程是長時間消耗的線程,我要主線程等到工作線程死亡,所以我在工作線程上調用連接方法,在Thread源代碼中,主線程在工作線程中等待活着:當主線程退出線程連接方法
while (isAlive()) {
wait(0);
}
當工作線程完成的工作和死亡,所以現在會發生什麼主線程?它是否通過線程調度器通過自動調用工作線程上的notifyAll方法來通知?
由於加入線程調用wait()
就像您在源代碼中看到的那樣,那麼目標線程必須調用notify()
或notifyAll
來喚醒它。
如果您在Thread源代碼中的任何地方都看不到它,那麼它可能發生在不同的類,本地代碼或非公共JVM供應商實現代碼中。
但是,這是一個實現細節:當目標線程完成時,您可以肯定地返回join
,如文檔中所述。
你是什麼意思的主線程? 你正在實現Runnable還是你在課堂上做了幾個線程? 如果你提供了更多的代碼,可能可以幫助你。
從主線程中調用workerThread.join()
將導致主線程暫停執行,直到workerThread
終止。然後,主線程在join()
調用之後移至下一個語句。
這是在Java教程的SimpleThreads示例中演示的。
好的,我明白了。謝謝。 – hiway 2013-03-16 03:29:07