原始碼分析 CountDownLatch

2021-07-26 23:59:22 字數 1065 閱讀 8894

countdownlatch會接受乙個初始化的int值count,通過呼叫await方法阻塞當前執行緒。通過其他執行緒呼叫countdown來降低當前狀態值,當當前狀態將至0 時,所有阻塞在countdownlatch的執行緒都會立刻從await返回。

countdownlatch時一次性的,不可以重置,如果需要重置請使用cyclicbarrier。

實現比較簡單。就是abstractqueuedsynchronizer基礎上的實現。

首先在countdownlatch內有乙個sync的內部靜態子類,繼承自aqs。

這裡主要是重寫了tryacquireshared和tryreleaseshared兩個共享鎖。以及乙個帶引數的構造器構造器用來初始化count數字。

private

static

final

class

sync

extends

abstractqueuedsynchronizer

int getcount()

protected

inttryacquireshared(int acquires)

protected

boolean

tryreleaseshared(int releases)

}}

每個countdownlatch包含乙個sync例項。使用組合的形式,將公用方法委託給這個sync例項實現。

public

countdownlatch(int count)

public

void

await() throws interruptedexception

public

boolean

await(long timeout, timeunit unit)

throws interruptedexception

public

void

countdown()

public

long

getcount()

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,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...