同步工具 CountDownLatch

2021-09-17 08:45:09 字數 995 閱讀 8008

我在本幣系統用了乙個countdownlatch實現了乙個把乙個非同步介面變成同步介面的用法。http介面呼叫的方法,主要是在servlet中的service方法中返回對應的response,然而該service方法中呼叫的乙個非同步介面的方法,如果不做限制的話直接返回為空。這裡其實可以用future介面,但當時我只會cdl所以這篇文章就看看cdl的原始碼把。

countdownlatch的實現很簡單,也和同步工具一樣,基於aqs實現的

private final sync sync;

private static final class sync extends abstractqueuedsynchronizer

int getcount()

//獲取狀態是否是0,如果是0則countdown的次數已經完畢,所有等待條件的執行緒將會釋放,不是0則還需要等待

protected int tryacquireshared(int acquires)

//這裡會有多個執行緒呼叫,所以自旋設定state-=1,如果state變為0則釋放所有等待執行緒。

protected boolean tryreleaseshared(int releases)

}}

public void await() throws interruptedexception
public void countdown()
可見由於aqs的強大,這裡的實現反而非常簡單。state表示的是「次數」,每次countdown就是state-=1

當state=0時 則之前的await執行緒將會被喚醒,由於是共享模式,會喚醒同步佇列中的所有等待執行緒,之後呼叫await的執行緒直接返回。aqs提供同步工具中需要的判斷是否阻塞,判斷是否釋放的功能,並且提供state來表示乙個子類需要的狀態。reentrantlock中的state表示執行緒是否獲取鎖,cdl的state表示是否阻塞條件滿足。

java執行緒同步之CountDownLatch

1 類說明 jdk的concurrent包中的countdownlatch類是乙個執行緒同步的輔助類,它使得執行緒可以一直等待在其它執行緒中執行的操作,直到此操作結束。countdownlatch在初始化的時候指定乙個大小值n,呼叫countdownlatch的await方法的執行緒會陷入等待之中,...

多執行緒條件通行工具 CountDownLatch

countdownlatch的作用是,執行緒進入等待後,需要計數器達到0才能通行。例子1 主線程建立了若干子執行緒,主線程需要等待這若干子執行緒結束後才結束。例子2 執行緒有若干任務,分多個執行緒來完成,需要等待這若干任務被完成後,才繼續執行處理。原始碼 since 1.5 author doug ...

java併發程式設計之CountDownLatch

countdownlatch 主要是作用是用來維護乙個執行緒控制多個執行緒,內部是通過乙個計數器實現的,當我們建立乙個countdownlatch物件的時候,就需要指定乙個數值,這個數值就表示了執行緒的數量,每當乙個執行緒任務執行完畢,計數器就會減 1,當計數器的值變為0時,就表示所有的執行緒都已經...