Java多線程sleep和wait的區別,總結得非常好

我們都知道sleep是讓線程休眠,到時間後會繼續執行,wait是等待,需要喚醒再繼續執行,那麼這兩種方法在多線程中的表現形態,它們各有什麼區別呢?

可以總結為以下幾點。

使用上

從使用角度看,sleep是Thread線程類的方法,而wait是Object頂級類的方法。

sleep可以在任何地方使用,而wait只能在同步方法或者同步塊中使用。

CPU及資源鎖釋放

sleep,wait調用后都會暫停當前線程並讓出cpu的執行時間,但不同的是sleep不會釋放當前持有的對象的鎖資源,到時間後會繼續執行,而wait會放棄所有鎖並需要notify/notifyAll后重新獲取到對象鎖資源后才能繼續執行。

異常捕獲

sleep需要捕獲或者拋出異常,而wait/notify/notifyAll不需要。

Advertisements

推薦書籍


  • Spring Cloud微服務實戰

  • JavaEE開發的顛覆者 Spring Boot實戰

  • SpringBoot揭秘 快速構建微服務體系

  • SpringBoot實戰

  • 精通Spring+4.x++企業應用開發實戰

獲取所有高清電子書下載請到274435854。

關注我們


看完有沒有收穫?分享到朋友圈給更多的人吧。

架構之路,頭條精選,每天一篇乾貨,喜歡就收藏+關注吧!

Advertisements

你可能會喜歡