更新時間:2022-09-22 10:13:27 來源:動力節點 瀏覽1317次
了解Java 中 sleep() 和 wait() 方法之間的區別。了解何時使用哪種方法以及它們在Java 并發中帶來的影響。
sleep()是一種用于暫停進程幾秒鐘或我們想要的時間的方法。但是在wait()notify()方法的情況下,線程進入等待狀態并且在我們調用or之前它不會自動返回notifyAll()。
主要區別在于,在等待時釋放鎖或wait()監視器sleep()而不釋放鎖或監視器。wait()用于線程間通信,而sleep()通常用于引入執行暫停。
Thread.sleep()將當前線程發送到“不可運行”狀態一段時間。線程保留它已獲取的監視器——即,如果線程當前位于synchronized塊或方法中,則沒有其他線程可以進入該塊或方法。如果另一個線程調用t.interrupt(). 它會喚醒睡眠線程。
Whilesleep()是一種static方法,這意味著它始終會影響當前線程(正在執行 sleep 方法的線程)。一個常見的錯誤是調用t.sleep()where tis a different thread;即使這樣,睡眠的也是當前線程,而不是t線程。
睡眠()示例
synchronized(LOCK) {
Thread.sleep(1000); // LOCK is held
}
等待()示例
synchronized(LOCK)
{
LOCK.wait(); // LOCK is not held
}
讓我們對以上所有要點進行簡單的分類以記住。
(1)調用的方法
wait()– 調用一個對象;當前線程必須在鎖對象上同步。
sleep()– 調用線程;總是當前正在執行的線程。
(2)同步的
wait()– 當同步多個線程一個一個訪問同一個對象時。
sleep()– 當同步多個線程等待休眠線程的休眠時。
(3)鎖定持續時間
wait()– 釋放鎖以使其他對象有機會執行。
sleep()– 如果指定超時或有人中斷,至少保持鎖定 t 次。
(4)喚醒狀態
wait()– 直到從對象調用 notify()、notifyAll()
sleep()– 直到至少時間到期或調用中斷()。
(5)用法
sleep()– 用于時間同步
wait()– 用于多線程同步。
以上就是關于“Java中wait和sleep的區別”介紹,大家如果對此比較感興趣,想了解更多相關知識,不妨來關注一下本站的Java多線程編程,里面還有更豐富的知識等著大家去學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習