CountDownLatch簡單使用

2022-09-12 03:09:10 字數 1709 閱讀 5334

package j**a.util.concurrent;

import j**a.util.concurrent.locks.abstractqueuedsynchronizer;

public class countdownlatch

int getcount()

protected int tryacquireshared(int acquires)

protected boolean tryreleaseshared(int releases) }}

private final 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()

public string tostring()

}

countdownlatch是乙個非常實用的多執行緒控制工具類。常用的就下面幾個方法:

countdownlatch(int count) //例項化乙個倒計數器,count指定計數個數

countdown() // 計數減一

await() //等待,當計數減到0時,所有執行緒並行執行

countdownlatch在我工作的多個場景被使用,算是用的很頻繁的了,比如我們的api介面響應時間被要求在200ms以內,但是如果乙個介面內部依賴多個三方/外部服務,那序列呼叫介面的rt必然很久,所以個人用的最多的是介面rt優化場景,內部服務並行呼叫。

對於倒計數器,一種典型的場景就是火箭發射。在火箭發射前,為了保證萬無一失,往往還要進行各項裝置、儀器的檢測。只有等到所有的檢查完畢後,引擎才能點火。那麼在檢測環節當然是多個檢測項可以同時進行的。**實現:

/**

* @author: 王琦 [email protected]

* @date: 2019-5-4 0004 9:43

* @description: 倒計時器示例:火箭發射

*/public class countdownlatchdemo implements runnable catch (interruptedexception e) finally

}public static void main(string args) throws interruptedexception

// 等待檢查

latch.await();

// 發射火箭

system.out.println("fire!");

// 關閉執行緒池

exec.shutdown();

}}

上述**中我們先生成了乙個countdownlatch例項。計數數量為10,這表示需要有10個執行緒來完成任務,等待在countdownlatch上的執行緒才能繼續執行。latch.countdown();方法作用是通知countdownlatch有乙個執行緒已經準備完畢,倒計數器可以減一了。latch.await()方法要求主線程等待所有10個檢查任務全部準備好才一起並行執行。

原文:

多執行緒 CountDownLatch

countdownlatch 允許乙個或多個執行緒等待其他執行緒完成操作。應用場景 假如有這樣乙個需求,當我們需要解析乙個excel裡多個sheet的資料時,可以考慮使用多執行緒,每個執行緒解析乙個sheet裡的資料,等到所有的sheet都解析完之後,程式需要提示解析完成。在這個需求中,要實現主線程...

執行緒同步 CountDownLatch

應用場景 有乙個任務想要往下執行,但必須要等到其他的任務執行完畢後才可以繼續往下執行。假如我們這個想要繼續往下執行的任務呼叫乙個countdownlatch物件的await 方法,其他的任務執行完自己的任務後呼叫同乙個countdownlatch物件上的countdown 方法,這個呼叫await ...

CountDownLatch 併發測試

countdownlatch,乙個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許乙個或多個執行緒一直等待。主要方法 public countdownlatch int count public voidcountdown public voidawait throws interrup...