2013-03-13 112 views
0

比方說,我有一個線程運行,並且裏面有一個timer.schedule(任務,5000)。我們現在假設定時器開始運行,並且在線程的某個地方有thread.sleep()。當線程仍在睡眠時,5000微秒通過。計時器的任務在它正在睡眠的線程中是否仍然運行?java定時器和thread.sleep

感謝

+3

解決這個問題的最簡單也是最令人興奮的方法是用自己創建的代碼自己測試一下。當你這樣做會發生什麼? – 2013-03-13 01:31:07

+1

另一種方法是查看'src.zip'文件中隨JDK提供的Java API源代碼文件。 – gparyani 2013-03-13 01:42:40

回答

4

Thread.sleep()方法不能某處線程,它可以在任務的代碼,因此執行任務時,它將阻止5000毫秒,然後運行至完成。

請注意,java.util.Timer是一個單線程調度程序,並且如果任務執行被阻止,Timer將無法執行其他計劃任務。請參閱API

與每個Timer對象相對應的是單個後臺線程,用於按順序執行所有計時器的任務。 計時器任務應該快速完成。如果一個計時器任務需要花費過多時間才能完成,它會「佔用」計時器的任務執行線程。反過來,這可能會延遲後續任務的執行,這些任務可能會「聚集起來」並在(如果)違規任務最終完成時快速連續執行。