15 執行緒等待通知機制總結

2021-09-02 04:09:10 字數 1851 閱讀 1062

執行緒等待通知機制總結

概述

乙個執行緒的等待阻塞狀態,受另外乙個執行緒控制。

object.wait()

object.notify()

特點必須基於特定的物件鎖synchronized

notify只會對已經處於wait狀態的執行緒生效。

使用必須在synchronized(obj)**內部使用,否則會丟擲異常

原理執行緒等待/喚醒在特定的物件鎖obj上

執行緒中斷

wait()中的執行緒,被其他執行緒t.interrupt()後,可中斷阻塞狀態,繼續執行**,並丟擲interruptedexception異常。

locksupport.park()

locksupport.unpark(t)

特點不需要維護同一物件,可實現模組之間的解耦

unpark可對已經處於park(),或者下次處於park()狀態的執行緒生效

原理內部呼叫的是unsafe.park/unpark()方法實現的

執行緒中斷

park()中的執行緒,被其他執行緒t.interrupt()後,可中斷阻塞狀態,繼續執行**,不丟擲interruptedexception異常。

object.wait()/notify()

使用案例

執行結果

特點

多個執行緒用於維護同乙個物件鎖。

wait notify等需要在synchronized物件鎖內部呼叫,否則會丟擲illegalmonitorstateexception。

使用場景

生產消費者模型

locksupport.park()/unpark()

使用案例

執行結果

特點

兩個執行緒之間不需要維護同乙個物件,可以實現模組之間的解耦。

unpark可以在park之前呼叫,可以對之後的執行緒t的一次park進行喚醒。

使用場景

基於cas原理,用於實現鎖的內部機制。

lock.lock()/unlock()  condition.await()/asignal()

使用案例

執行結果

1 2 a 3 4 b 5 6 c

特點

使用場景

允許執行緒在一定時間內獲取鎖,獲取失敗則返回(而非陷入休眠);

允許讀寫鎖分離的場景;

允許以任何順序獲取和釋放多個鎖。

多執行緒學習大綱:

等待 通知機制

waitnotify模式的注意事項 經典案例生產者消費者模式實現 實戰等待通知之交叉備份 舉例說明,廚師和服務員之間的互動 1.廚師做完一道菜的時間不確定,所以廚師將菜品放到 菜品傳遞臺 上的時間也不確定 2.服務員取到菜的時間取決於廚師,所以服務員就處於等待狀態 3.服務員如何取到菜呢?又得取決於...

Conditon等待 通知機制

condition的api和object的wait notify用法大致相同,但是object需要配合synchronized來使用,如果使用顯示鎖lock無法使用。因此condition應運而生,他是由lock的api建立出來的等待 通知機制 await signal 和wait notify 相...

03 Java多執行緒 執行緒等待通知機制

三 執行緒等待通知 四 參考 如果等待時長為t,當前時間為now,那麼now t以後超時 long overtime now t long remain t while result不滿足 remian 0 return result shop類模擬商店,初始狀態玩具是nothing,執行緒等待玩具...