全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

wait和sleep二者有什么不同?

更新時(shí)間:2023-10-24 來(lái)源:黑馬程序員 瀏覽量:

wait() ,wait(long) 和 sleep(long) 的效果都是讓當(dāng)前線程暫時(shí)放棄 CPU 的使用權(quán),進(jìn)入阻塞狀態(tài),但二者有明顯區(qū)別:

方法歸屬不同

  * sleep(long) 是 Thread 的靜態(tài)方法。

  * 而 wait(),wait(long) 都是 Object 的成員方法,每個(gè)對(duì)象都有。

  * 醒來(lái)時(shí)機(jī)不同。

  * 執(zhí)行 sleep(long) 和 wait(long) 的線程都會(huì)在等待相應(yīng)毫秒后醒來(lái)。

  * wait(long) 和 wait() 還可以被 notify 喚醒,wait() 如果不喚醒就一直等下去。

  * 它們都可以被打斷喚醒。

  * 鎖特性不同(重點(diǎn))。

  * wait 方法的調(diào)用必須先獲取 wait 對(duì)象的鎖,而 sleep 則無(wú)此限制。

  * wait 方法執(zhí)行后會(huì)釋放對(duì)象鎖,允許其它線程獲得該對(duì)象鎖(我放棄 cpu,但你們還可以用)。

  * 而 sleep 如果在 synchronized 代碼塊中執(zhí)行,并不會(huì)釋放對(duì)象鎖(我放棄 cpu,你們也用不了)。


分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!