我們都知道sleep是讓線程休眠,到時間後會繼續執行,wait是等待,需要喚醒再繼續執行,那麼這兩種方法在多線程中的表現形态,它們各有什麼差別呢?
可以總結為以下幾點。
使用上
從使用角度看,sleep是Thread線程類的方法,而wait是Object頂級類的方法。
sleep可以在任何地方使用,而wait隻能在同步方法或者同步塊中使用。
CPU及資源鎖釋放
sleep,wait調用後都會暫停目前線程并讓出cpu的執行時間,但不同的是sleep不會釋放目前持有的對象的鎖資源,到時間後會繼續執行,而wait會放棄所有鎖并需要notify/notifyAll後重新擷取到對象鎖資源後才能繼續執行。
異常捕獲
sleep需要捕獲或者抛出異常,而wait/notify/notifyAll不需要。