最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的CountDownLatch閉鎖詳解

 更新時間:2023年12月06日 11:56:27   作者:小柴林  
這篇文章主要介紹了Java中的CountDownLatch閉鎖詳解,CountDownLatch用給定的計數(shù)初始化,await屬于阻塞方法,直到當前計數(shù)達到零,由于countDown方法被調(diào)用,然后釋放所有await等待的線程,并立即返回線程后續(xù)的await調(diào)用邏輯,需要的朋友可以參考下

Java中的CountDownLatch閉鎖

CountDownLatch是對synchronization拓展,允許一個或多個線程等待,直到在其他線程中執(zhí)行的一組操作完成。

CountDownLatch用給定的計數(shù)初始化。

await屬于阻塞方法,直到當前計數(shù)達到零,由于countDown方法被調(diào)用,然后釋放所有await等待的線程,并立即返回線程后續(xù)的await調(diào)用邏輯。

CountDownLatch是一種一次性現(xiàn)象——計數(shù)無法重置

如果需要重新設置計數(shù)的版本,可以考慮使用CyclicBarrier。

CountDownLatch是一種通用的同步工具,可以用于多種目的。

初始化一個count為1的CountDownLatch用作一個簡單的on/off latch或gate:所有調(diào)用wait的線程都在gate處等待,直到它被調(diào)用countDown的線程打開。

一個初始化為N的CountDownLatch可以用來讓一個線程等待,直到N個線程完成了某個操作,或者某個操作已經(jīng)完成了N次。

CountDownLatch的一個有用特性是,它不要求調(diào)用countDown的線程等待計數(shù)達到零才繼續(xù),它只是防止任何線程繼續(xù)等待,直到所有線程都通過。

示例用法:這里有兩個類,其中一組工作線程使用兩個倒計時鎖存器:

第一個是啟動信號,它阻止任何worker繼續(xù)工作,直到驅(qū)動程序準備好讓它們繼續(xù)工作;

第二個是一個完成信號,它允許驅(qū)動程序等待所有worker完成。

class Driver { // ...
   void main() throws InterruptedException {
     CountDownLatch startSignal = new CountDownLatch(1);
     CountDownLatch doneSignal = new CountDownLatch(N);
     for (int i = 0; i < N; ++i) // create and start threads
       new Thread(new Worker(startSignal, doneSignal)).start();
     doSomethingElse();            // 預備工作邏輯
     startSignal.countDown();      // 讓所有Worker開始工作
     doSomethingElse();
     doneSignal.await();           // 等待所有Worker完成自己邏輯
   }
 }
 class Worker implements Runnable {
   private final CountDownLatch startSignal;
   private final CountDownLatch doneSignal;
   Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
     this.startSignal = startSignal;
     this.doneSignal = doneSignal;
   }
   public void run() {
     try {
       startSignal.await();
       doWork();
       doneSignal.countDown();
     } catch (InterruptedException ex) {} // return;
   }
   void doWork() { ... }
 }

另一種典型的用法是將一個問題分成N個部分,用一個Runnable描述每個部分,該Runnable執(zhí)行該部分并在鎖存器上計數(shù),然后將所有Runnables排隊到一個執(zhí)行器。當所有子部件都完成時,協(xié)調(diào)線程將能夠通過并等待。(當線程必須以這種方式重復倒數(shù)時,使用CyclicBarrier。)

class Driver2 { // ...
   void main() throws InterruptedException {
     CountDownLatch doneSignal = new CountDownLatch(N);
     Executor e = ...
     for (int i = 0; i < N; ++i) // 創(chuàng)建和開啟線程
       e.execute(new WorkerRunnable(doneSignal, i));
     doneSignal.await();           // 等待所有Worker完成邏輯操作
   }
 }
 class WorkerRunnable implements Runnable {
   private final CountDownLatch doneSignal;
   private final int i;
   WorkerRunnable(CountDownLatch doneSignal, int i) {
     this.doneSignal = doneSignal;
     this.i = i;
   }
   public void run() {
     try {
       doWork(i);
       doneSignal.countDown();
     } catch (InterruptedException ex) {} // return;
   }
   void doWork() { ... }
 }

內(nèi)存一致性效應:在計數(shù)達到零之前,在另一個線程中調(diào)用countDown()之前的動作發(fā)生——在從相應的await()成功返回之后的動作發(fā)生之前。

CountDownLatch底層通過內(nèi)部類Sync繼承AbstractQueuedSynchronizer類;

計數(shù)器字段使用內(nèi)存語義volatile修飾,private volatile int state;

到此這篇關于Java中的CountDownLatch閉鎖詳解的文章就介紹到這了,更多相關CountDownLatch閉鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java使用MulticastSocket實現(xiàn)群聊應用程序

    Java使用MulticastSocket實現(xiàn)群聊應用程序

    這篇文章主要為大家詳細介紹了Java使用MulticastSocket實現(xiàn)群聊應用程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • JAVA文件讀寫操作詳解

    JAVA文件讀寫操作詳解

    這篇文章主要為大家詳細介紹了JAVA文件讀寫操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 詳解Java設計模式編程中的里氏替換原則

    詳解Java設計模式編程中的里氏替換原則

    這篇文章主要介紹了Java設計模式編程中的里氏替換原則,有這個名字是因為這是由麻省理工學院的一位姓里的女士Barbara Liskov提出來的(嗯...),需要的朋友可以參考下
    2016-02-02
  • 一篇文章帶你了解XGBoost算法

    一篇文章帶你了解XGBoost算法

    XGBoost全名叫(eXtreme Gradient Boosting)極端梯度提升,經(jīng)常被用在一些比賽中,其效果顯著。它是大規(guī)模并行boosted tree的工具,它是目前最快最好的開源boosted tree工具包
    2021-08-08
  • java中繼承測試代碼分析

    java中繼承測試代碼分析

    這篇文章主要介紹了java中繼承測試代碼分析,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java中正則表達式匹配過程實例詳解

    Java中正則表達式匹配過程實例詳解

    正則匹配即是在給定字符串中查找符合正則表達式的字符,下面這篇文章主要給大家介紹了關于Java中正則表達式匹配過程的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • springboot使用之多個filter的執(zhí)行順序以及配置方式

    springboot使用之多個filter的執(zhí)行順序以及配置方式

    這篇文章主要介紹了springboot使用之多個filter的執(zhí)行順序以及配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java設計模式—觀察者模式詳解

    Java設計模式—觀察者模式詳解

    這篇文章主要介紹了Java設計模式—觀察者模式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • mybatis-plus QueryWrapper 添加limit方式

    mybatis-plus QueryWrapper 添加limit方式

    這篇文章主要介紹了mybatis-plus QueryWrapper 添加limit方式,具有很好的參考價值,希望對大家有所
    2022-01-01
  • Spring Boot 中集成 Lombok 和 MapStruct最佳實踐指南

    Spring Boot 中集成 Lombok 和 MapStruct最

    文章詳解SpringBoot項目中Lombok與MapStruct整合實踐,涵蓋版本兼容、IDE配置、代碼分層、映射配置、測試驗證及性能優(yōu)化,重點解決注解沖突、依賴注入等常見問題,強調(diào)分層管理和組件掃描配置,提升開發(fā)效率與代碼簡潔性,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-08-08

最新評論

建水县| 集安市| 囊谦县| 长乐市| 天津市| 潮州市| 砀山县| 沁阳市| 博白县| 马边| 蒙城县| 柳州市| 革吉县| 鹿泉市| 汤原县| 武乡县| 天津市| 申扎县| 贺州市| 常德市| 诏安县| 忻州市| 理塘县| 高唐县| 南平市| 青川县| 博兴县| 甘泉县| 新乡县| 陵川县| 宿迁市| 崇阳县| 大兴区| 旬邑县| 孝感市| 怀远县| 昔阳县| 沈丘县| 苗栗县| 湘乡市| 驻马店市|