CyclicBarrier用例 原始碼分析講解

2022-05-14 06:58:22 字數 1355 閱讀 8741

cyclicbarrier 的字面意思是可迴圈使用(cyclic)的屏障(barrier)。它要做的事情是,讓一組執行緒到達乙個屏障(也可以叫同步點)時被阻塞,直到最後乙個執行緒到達屏障時,屏障才會開門,所有被屏障攔截的執行緒才會繼續工作。

cyclicbarrier 預設的構造方法是 cyclicbarrier(int parties),其引數表示屏障攔截的執行緒數量,每個執行緒呼叫 await 方法告訴 cyclicbarrier 當前執行緒已經到達了屏障,然後當前執行緒被阻塞

使用場景

當存在需要所有的子任務都完成時,才執行主任務,這個時候就可以選擇使用 cyclicbarrier

使用案例

dataimportthread :

public class dataimportthread extends thread

@override

public void run() catch

(interruptedexception e) catch (brokenbarrierexception e) } }

cyclibarrierdemo :

public static class cyclibarrierdemo extends thread 

public static void main(string args)

}

注意點1)對於指定計數值 parties,若由於某種原因,沒有足夠的執行緒呼叫 cyclicbarrier 的 await,則所有呼叫 await 的執行緒都會被阻塞;

2)同樣的 cyclicbarrier 也可以呼叫 await(timeout, unit),設定超時時間,在設定時間內,如果沒有足夠執行緒到達,則解除阻塞狀態,繼續工作;

3)通過 reset 重置計數,會使得進入 await 的執行緒出現brokenbarrierexception;

4 )如果採用是 cyclicbarrier(int parties, runnablebarrieraction) 構造方法,執行 barrieraction 操作的是最後乙個到達的執行緒。

實現原理

cyclicbarrier 相比 countdownlatch 來說,要簡單很多,原始碼實現是基於 reentrantlock 和 condition 的組合使用。看如下示意圖,cyclicbarrier 和 countdownlatch 是不是很像,只是 cyclicbarrier 可以有不止乙個柵欄,因為它的柵欄(barrier)可以重複使用(cyclic)

業務用例和系統用例

拋開前一篇文章談的總體思路,我們今天來談一下需求分析工作實質性的做些什麼。在這裡,我們,將主要關注於分析層面,也即 uml中的用例模型和邏輯模型。在這裡要申明的是邏輯模型並不能完全算需求分析階段的工作,因為它包含了設計模型的概念,但是我又把它歸納了一塊到需求分析階段,原因在於邏輯模型中存在了業務物件...

業務用例和系統用例

業務用例與系統用例具有同樣的特徵,因此編寫和評審用例的方法對兩者都適用。在業務用例中說明的東西,也會在系統用例中說明。這形成了系統用例和使用者用例之間的合作。但這樣帶來了兩個壞訊息。第乙個壞訊息 編寫者和讀者經常把二者弄混,可能把系統行為放入業務用例中,也可能把業務操作歸於系統用例。如果能夠商量著去...

用例設計 介面用例設計

在介面測試過程中,用例設計是關鍵中的關鍵,需要重點關注的一些維度 介面就是內部模組對模組,外部系統對其他服務提供的一種可呼叫或者連線的能力的標準,所謂的介面是模組與模組之間的一種連線 上圖為乙個典型的介面,乙個介面通常是有輸入輸出的,輸入就是我們常見的入參,輸出有時有,有時沒有。呼叫相關介面,介面會...