主要有四個方面的區別:
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