標籤:

線程模式:Leader-Follower

線程模式:Leader-Follower

來自專欄 Java之鏈

線程基礎:

1:Java 中有兩類線程:User Thread(用戶線程)、Daemon Thread(守護線程)。守護線程依賴非守護線程的存在,比如垃圾回收現場。如果用戶線程結束,守護線程也會退出。

2:線程的狀態:NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED

思考一下BLOCKED和WAITING有什麼區別?怎麼實現?

3:sleep和wait有什麼區別?

1)這兩個方法來自不同的類分別是Thread和Object

2)最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖

3)wait,notify和notifyAll只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何

地方使用

4)sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常

線程狀態轉換圖

注意:上圖中Java線程沒有Running這個狀態,可執行和執行中都屬於Runnable

領導者-跟隨者模式狀態圖

(1)線程有3種狀態:領導leading,處理processing,追隨following

(2)假設共N個線程,其中只有1個leading線程(等待任務),x個processing線程(處理),餘下有N-1-x個following線程(空閑)

(3)有一把鎖,誰搶到就是leading,它的任務是等待新任務。

(4)事件/任務來到時,leading線程會對其進行處理,從而轉化為processing狀態,處理完成之後,又轉變為following

(5)丟失leading後,following會嘗試搶鎖,搶到則變為leading,否則保持following

(6)following不干事,就是搶鎖,力圖成為leading

在延遲隊列DelayQueue中可以看這種線程模式。這種隊列常見用於以下問題:

a) 關閉空閑連接。伺服器中,有很多客戶端的連接,空閑一段時間之後需要關閉之。

b) 緩存。緩存中的對象,超過了空閑時間,需要從緩存中移出。

c) 任務超時處理。在網路協議滑動窗口請求應答式交互時,處理超時未響應的請求。


推薦閱讀:

Condition
CyclicBarrier
性能測試之並發壓力
semaphore

TAG:並發 |