sleep和wait的區別


主要有四個方面的區別:

1、sleep是線程中的方法,但是wait是Object中的方法

2、sleep方法不會釋放lock,但是wait會釋放,而且會加入等待隊列中

3、sleep方法不依賴於同步器synchronized,但是wait需要依賴synchronized關鍵字

3、sleep不需要被喚醒(休眠之后退出阻塞),但是wait需要(不指定時間需要被別人中斷)

 

一、sleep是線程方法,wait是Object方法

二、sleep不釋放lock,wait會釋放

 

 

我們看一下運行結果:

 

 

 

在上面的結果中,線程2先獲取了cpu資源,然后開始執行休眠,在休眠過程中線程1是沒法執行的,必須要等待線程2結束之后才可以。這也就是說sleep方法不會釋放鎖,讓其他線程進來。

然后我們測試一下wait方法。

 

 

在上面的例子中,我們使用wait方法等待10秒鍾,然后結束。我們看一下結果:

 

 

 三、sleep不依賴同步方法,wait需要

我們還是一次來驗證。首先我們測試sleep方法

 

 這個方法會依次運行,不會出現任何異常。然后我們主要是看wait方法

 

 

我們運行以下,看一下結果:

 

 

 四、sleep不需要被喚醒,wait需要

sleep方法很簡單,我們主要關注wait方法。看代碼:

首先我們定義兩個方法,一個等待方法,一個喚醒方法。

 

 然后再去測試一下:

 

 如果沒有喚醒方法,那第一個線程就會處於一直等待的狀態,第二個線程喚醒了之后就不再等待了。

 

 

摘自:https://baijiahao.baidu.com/s?id=1647423693517849309&wfr=spider&for=pc


免責聲明!

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



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