sleep() 和 wait() 有什么區別?


1、這兩個方法來自不同的類分別是Thread和Object,sleep方法屬於Thread類中的靜態方法,wait屬於Object的成員方法。


2、最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。


3、wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用(使用范圍)。

 

sleep方法屬於Thread類中方法,表示讓一個線程進入睡眠狀態,等待一定的時間之后,

自動醒來進入到可運行狀態,不會馬上進入運行狀態,

因為線程調度機制恢復線程的運行也需要時間,一個線程對象調用了sleep方法之后,

並不會釋放他所持有的所有對象鎖,所以也就不會影響其他進程對象的運行。

但在sleep的過程中有可能被其他對象調用它的interrupt(), 產生InterruptedException異常,

如果你的程序不捕獲這個異常,線程就會異常終止,進入TERMINATED結束狀態,

如果你的程序捕獲了這個異常,那么程序就會繼續執行catch語句塊(可能還有finally語句塊)以及以后的代碼。

 

wait屬於Object的成員方法,一旦一個對象調用了wait方法,

必須要采用notify()和notifyAll()方法喚醒該線程;

如果線程擁有某個或某些對象的同步鎖,那么在調用了wait()后,

這個線程就會釋放它持有的所有同步資源,而不限於這個被調用了wait()方法的對象。

wait()方法也同樣會在wait的過程中有可能被其他對象調用interrupt() 方法而產生InterruptedException,

效果以及處理方式同sleep()方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM