sleep()方法和wait()方法的區別?安全
- sleep方法是Thread的靜態方法,wait方法是Object類的普通方法
- sleep方法不釋放同步鎖,wait方法釋放同步鎖(執行notify方法喚醒wait的線程時是不釋放同步鎖的)
- wait方法用於線程間通訊,而sleep方法用於短暫的暫停線程
- sleep針對當前線程,而wait針對被同步代碼塊加鎖的對象
- sleep方法是當前線程暫停指定時間,將執行機會讓給其它線程,時間結束後進入就緒狀態等待
- 調用wait方法會暫停線程,當前線程釋放對象的同步鎖,進入等待池(wait pool),只有調用對象的notify或者notifyAll方法喚醒時,線程進入等鎖池(lock pool),直到線程再次得到對象的鎖纔會進入就緒狀態
- wait方法(notify,notifyAll)只能在同步方法或者同步塊中使用(若是在non-synchronized函數或non-synchronizedblock中進行調用,雖然能編譯經過,但在運行時會發生illegalMonitorStateException的異常);sleep方法能夠在任意位置使用
注:函數
若是線程A但願當即結束線程B,則能夠對線程B對應的Thread實例調用interrupt方法。若是此刻線程B正在wait/sleep/join,則線程B會馬上拋出InterruptedException,在catch() {} 中直接return便可安全地結束線程spa
sleep()方法和yield()方法的區別?線程
- sleep方法給其餘線程機會時不考慮線程優先級(優先級低的也有可能);而yield方法只會給相同優先級或者更高優先級線程機會(若是沒有相同或者更高優先級的線程,該線程會繼續運行)
- 線程執行sleep方法進入阻塞狀態,執行yield方法進入就緒狀態