原始碼分析 CyclicBarrier

2021-08-20 13:17:03 字數 1531 閱讀 9500

**:

private

static

class

generation

private

final reentrantlock lock = new reentrantlock();//所有方法都通過這個鎖來同步。之所以不使用內建鎖主要是因為需要丟擲異常。此外這裡需要的實際上是共享鎖,而內建鎖不能實現共享鎖。

private

final condition trip = lock.newcondition();//通過lock得到的乙個狀態變數

private

final

int parties;//通過構造器傳入的引數,表示總的等待執行緒的數量。

private

final runnable barriercommand;//當屏障正常開啟後執行的程式,通過最後乙個呼叫await的執行緒來執行。

private generation generation = new generation();當前的generation。每當屏障失效或者開閘之後都會自動替換掉。從而實現重置的功能。

指定了限時操作,並到達執行緒,則丟擲timeoutexception

如果barrier被重置,或者屏障處於打破狀態,則丟擲brokenbarrierexception

private

intdowait(boolean timed, long nanos)

throws interruptedexception, brokenbarrierexception,

timeoutexception

int index = --count;//嘗試降低當前count

if (index == 0) finally

}// loop until tripped, broken, interrupted, or timed out

for (;;) catch (interruptedexception ie) else

}//從阻塞恢復之後,需要重新判斷當前的狀態。

if (g.broken)

throw

new brokenbarrierexception();

if (g != generation)

return index;

if (timed && nanos <= 0l)

}} finally

}

private

void

nextgeneration()

private

void

breakbarrier()

reset方法比較簡單。但是這裡還是要注意一下要先打破當前遮蔽,然後再重建乙個新的遮蔽。否則的話可能會導致訊號丟失。

public

void

reset() finally

}

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...