天天看點

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

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

可以總結為以下幾點。

使用上

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

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

CPU及資源鎖釋放

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

異常捕獲

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