2012-05-21 76 views
0

兩者都試圖做類似的事情,這對線程產生了一些影響。Thread.sleep和object.wait

我知道thread.sleep是讓CURRENT線程進入休眠狀態,等待可以讓任何線程等待,如果他們試圖獲取對象的鎖定。

問題是,他們大多數時間都在做類似的事情 - 是什麼讓你選擇一個在另一個?

回答

0

一個用於同步線程在一起,而另一個用於睡眠一段給定的時間。

如果你想同步線程在一起,用戶等待/通知。如果你想睡一段已知的時間,使用Thread.sleep。

10

不,Object.wait()將永遠只會導致當前線程也被阻止。

的主要區別在於,sleep()指示當前線程休眠一段時間,而wait()指示當前線程釋放監視器,然後睡直到顯示器被通知。換句話說,wait()是線程之間的協調原語,而sleep()只關心時間的流逝(假設沒有中斷)。

0

這兩種方法做了非常不同的事情:Thread.sleep等待指定的時間量,而Object.wait等待通知事件(可能需要任意的時間量)。

兩者都只能讓當前線程進入睡眠狀態。另外,Object.wait要求當前線程持有與該對象關聯的監視器。

1

睡眠和等待的外觀deciving,他們用了很多不同:

睡眠 - 使線程睡眠的時間一定量 - 好Schedualing任務,動畫和更多...

等待 - 主要用於沒有時間限制,使一個線程等待一些heppen,這是同步的最佳做法。

如果你試圖通過使用睡眠來實現等待,這是不好的做法,這有點接近一些非常糟糕的事情,稱爲繁忙等待。