2010-04-07 73 views
3

比方說,我想「暫停」一個線程,以便其他線程可以更高效地運行。阻塞變得毫無意義(或幾乎毫無意義)之前的最短休眠時間是多少?Thread.sleep(long)有效嗎?

回答

2

我期望任何量的睡眠都至少是調用yield()的功能等價物,所以從來沒有一點是「毫無意義的」。確實有一點,一個小的值本質上是無法區分的,因爲等待操作系統返回到線程的開銷比一個小的睡眠時間長。這可能發生在5-10範圍內的某個地方,但它當然是特定於操作系統的。

2

這很難一概而論,並會因您的具體問題而有所不同。但是,我不會自己睡覺來管理線程。您可以將線程放入Executor並讓它管理它們。您也可以使用PriorityQueue來訂購您的任務。

+0

我不認爲執行者可以預測線程何時空閒(或者他們可以嗎?) – someguy 2010-04-07 18:05:17

2

IIRC甚至Thread.sleep(0)將使線程屈服,允許其他具有相同或更高優先級的線程運行。

這取決於線程的優先級......我的理解是,Thread.sleep有效地產生線程,並將其優先級設置爲睡眠期間的最低值。

正如其他人所提到的,你可能不應該使用它來手動安排你的線程。但是,如果您已經共享互斥鎖,則可能需要釋放它們,然後執行Thread.sleep以幫助解決線程鎖定情況,這很有用。

+0

這不是關於調度;這是關於更有效地處理資源。 – someguy 2010-04-07 18:01:27