wait 和 sleep 的区别
生活随笔
收集整理的這篇文章主要介紹了
wait 和 sleep 的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
wait 和 sleep 的區別
sleep不釋放對象鎖,wait放棄對象鎖
sleep是線程類(Thread)的方法,wait是Object類的方法;
sleep暫停線程、但監控狀態仍然保持,結束后會自動恢復
共同點?:?1. 他們都是在多線程的環境下,都可以在程序的調用處阻塞指定的毫秒數,并返回。?
2. wait()和sleep()都可以通過interrupt()方法 打斷線程的暫停狀態 ,從而使線程立刻拋出InterruptedException。?
如果線程A希望立即結束線程B,則可以對線程B對應的Thread實例調用interrupt方法。如果此刻線程B正在wait/sleep/join,則線程B會立刻拋出InterruptedException,在catch() {} 中直接return即可安全地結束線程。?
需要注意的是,InterruptedException是線程自己從內部拋出的,并不是interrupt()方法拋出的。對某一線程調用 interrupt()時,如果該線程正在執行普通的代碼,那么該線程根本就不會拋出InterruptedException。但是,一旦該線程進入到 wait()/sleep()/join()后,就會立刻拋出InterruptedException 。?
不同點?:??
1.每個對象都有一個鎖來控制同步訪問。Synchronized關鍵字可以和對象的鎖交互,來實現線程的同步。?
sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。?
2.wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用?
3.sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常? 4.sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復。調用sleep不會釋放對象鎖。 5.wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
轉載于:https://www.cnblogs.com/xmyclass/articles/4701843.html
總結
以上是生活随笔為你收集整理的wait 和 sleep 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HashSet 的contains方法
- 下一篇: AIX系统相关的日常操作