sleep()
方法是定義在Thread
上的native
方法, 在設定時間段內(精度取決于CPU)阻塞線程的執行, 但是并不更改線程的鎖持有情況.
wait()
方法是定義在Object
上的方法, 是java語言級的方法, 需要在同步塊或者同步方法中進行調用, 會釋放鎖, 并進入鎖對象的等待隊列, 需要等到其他線程調用notify()
方法釋放鎖后(實際上該線程同步塊運行結束后才會釋放鎖), 重新競爭鎖.
兩者的共同點是
都暫時停止線程的執行, 線程本身不會占用CPU時間片.區別是調用了sleep
方法的線程直接受CPU調度, 而wait
則是等待另外的java線程在持有同一個對象鎖的同步塊/方法中進行notify
調用.實際上不用可以區分兩者, 因為兩者都會暫停線程的執行. 兩者的區別是: 進入waiting狀態是線程主動的, 而進入blocked狀態是被動的. 更進一步的說, 進入blocked狀態是在同步(synchronized代碼之外), 而進入waiting狀態是在同步代碼之內.
注: 以上文字引用自CSDN YidingHe的回答
新聞熱點
疑難解答