兩者都試圖做類似的事情,這對線程產生了一些影響。Thread.sleep和object.wait
我知道thread.sleep是讓CURRENT線程進入休眠狀態,等待可以讓任何線程等待,如果他們試圖獲取對象的鎖定。
問題是,他們大多數時間都在做類似的事情 - 是什麼讓你選擇一個在另一個?
兩者都試圖做類似的事情,這對線程產生了一些影響。Thread.sleep和object.wait
我知道thread.sleep是讓CURRENT線程進入休眠狀態,等待可以讓任何線程等待,如果他們試圖獲取對象的鎖定。
問題是,他們大多數時間都在做類似的事情 - 是什麼讓你選擇一個在另一個?
一個用於同步線程在一起,而另一個用於睡眠一段給定的時間。
如果你想同步線程在一起,用戶等待/通知。如果你想睡一段已知的時間,使用Thread.sleep。
不,Object.wait()
將永遠只會導致當前線程也被阻止。
的主要區別在於,sleep()
指示當前線程休眠一段時間,而wait()
指示當前線程釋放監視器,然後睡直到顯示器被通知。換句話說,wait()
是線程之間的協調原語,而sleep()
只關心時間的流逝(假設沒有中斷)。
這兩種方法做了非常不同的事情:Thread.sleep
等待指定的時間量,而Object.wait
等待通知事件(可能需要任意的時間量)。
兩者都只能讓當前線程進入睡眠狀態。另外,Object.wait
要求當前線程持有與該對象關聯的監視器。
睡眠和等待的外觀deciving,他們用了很多不同:
睡眠 - 使線程睡眠的時間一定量 - 好Schedualing任務,動畫和更多...
等待 - 主要用於沒有時間限制,使一個線程等待一些heppen,這是同步的最佳做法。
如果你試圖通過使用睡眠來實現等待,這是不好的做法,這有點接近一些非常糟糕的事情,稱爲繁忙等待。