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

Java中的CyclicBarrier循環(huán)柵欄解析

 更新時(shí)間:2023年12月31日 08:07:33   作者:_Romeo  
這篇文章主要介紹了Java中的CyclicBarrier循環(huán)柵欄解析,從字面上的意思可以知道,這個(gè)類的中文意思是"循環(huán)柵欄",大概的意思就是一個(gè)可循環(huán)利用的屏障,它的作用就是會(huì)讓所有線程都等待完成后才會(huì)繼續(xù)下一步行動(dòng),需要的朋友可以參考下

概念

  • 從字面上的意思可以知道,這個(gè)類的中文意思是“循環(huán)柵欄”。大概的意思就是一個(gè)可循環(huán)利用的屏障。
  • 它的作用就是會(huì)讓所有線程都等待完成后才會(huì)繼續(xù)下一步行動(dòng)。
  • 舉個(gè)例子,就像生活中我們會(huì)約朋友們到某個(gè)餐廳一起吃飯,有些朋友可能會(huì)早到,有些朋友可能會(huì)晚到,但是這個(gè)餐廳規(guī)定必須等到所有人到齊之后才會(huì)讓我們進(jìn)去。這里的朋友們就是各個(gè)線程,餐廳就是 CyclicBarrier。

構(gòu)造方法

public CyclicBarrier(int parties)
public CyclicBarrier(int parties, Runnable barrierAction)

解析:

  • parties 是參與線程的個(gè)數(shù)
  • 第二個(gè)構(gòu)造方法有一個(gè) Runnable 參數(shù),這個(gè)參數(shù)的意思是最后一個(gè)到達(dá)線程要做的任務(wù)

重要方法

public int await() throws InterruptedException, BrokenBarrierException
public int await(long timeout, TimeUnit unit) throws InterruptedException, BrokenBarrierException, TimeoutException

解析:

  • 線程調(diào)用 await() 表示自己已經(jīng)到達(dá)柵欄
  • BrokenBarrierException 表示柵欄已經(jīng)被破壞,破壞的原因可能是其中一個(gè)線程 await() 時(shí)被中斷或者超時(shí)

自定義實(shí)現(xiàn)一個(gè)CyclicBarrier

代碼如下:

public class KaneCyclicBarrier {
    private final ReentrantLock lock = new ReentrantLock();
    private final Condition condition = lock.newCondition();
    private int count =0; //批次
    private final int parties; //多少線程準(zhǔn)備就緒?
    private Object generation = new Object();
    public KaneCyclicBarrier(int parties) {
        this.parties = parties;
    }
    public  void await(){
        final ReentrantLock lock = this.lock;
        lock.lock();
       try {
            final  Object g = generation;
           int index = ++count;
           if (index == parties) {
             nextGeneration();
             return;
           }
           while (true) {
               try {
                   condition.await();
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
               if(g!=generation){
                   return;
               }
           }
       }finally {
           lock.unlock();
       }
    }
    public void nextGeneration(){
        condition.signalAll();
        count=0;
        generation = new Object();
    }
}

測(cè)試一下,代碼如下:

public class CyclicBarrier_Demo {
    public CyclicBarrier_Demo() {
    }
    public static void main(String[] args) throws InterruptedException {
        KaneCyclicBarrier barrier = new KaneCyclicBarrier(4);
        for(int i = 0; i < 100; ++i) {//假設(shè)有100個(gè)任務(wù),每次只能有固定數(shù)量的線程去執(zhí)行,可以使用這個(gè)
            (new Thread(() -> {
                barrier.await();
                System.out.println("任務(wù)開始執(zhí)行");
            })).start();
            Thread.sleep(500L);
        }
    }
}

CyclicBarrier 可以用于多線程計(jì)算數(shù)據(jù),最后合并計(jì)算結(jié)果的場(chǎng)景。

CyclicBarrier 與 CountDownLatch 區(qū)別

  • CountDownLatch 是一次性的,CyclicBarrier 是可循環(huán)利用的
  • CountDownLatch減計(jì)數(shù),CyclicBarrier加計(jì)數(shù)。
  • CountDownLatch 參與的線程的職責(zé)是不一樣的,有的在倒計(jì)時(shí),有的在等待倒計(jì)時(shí)結(jié)束。CyclicBarrier 參與的線程職責(zé)是一樣的。

到此這篇關(guān)于Java中的CyclicBarrier循環(huán)柵欄解析的文章就介紹到這了,更多相關(guān)CyclicBarrier循環(huán)柵欄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)WORD和PDF互相轉(zhuǎn)換以及數(shù)據(jù)填充示例

    Java實(shí)現(xiàn)WORD和PDF互相轉(zhuǎn)換以及數(shù)據(jù)填充示例

    本文介紹了如何使用Java實(shí)現(xiàn)WORD和PDF的互轉(zhuǎn)以及數(shù)據(jù)填充功能,通過導(dǎo)入Aspose庫(kù)并使用其工具類,可以輕松實(shí)現(xiàn)WORD和PDF模板的填充和轉(zhuǎn)換,需要的朋友可以參考下
    2025-02-02
  • JDBC連接MySQL并實(shí)現(xiàn)模糊查詢

    JDBC連接MySQL并實(shí)現(xiàn)模糊查詢

    本文詳細(xì)講解了JDBC連接MySQL并實(shí)現(xiàn)模糊查詢的方式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java常見運(yùn)算符之位運(yùn)算符大全

    Java常見運(yùn)算符之位運(yùn)算符大全

    這篇文章主要介紹了Java常見運(yùn)算符之位運(yùn)算符的相關(guān)資料,包括按位與、按位或、按位異或、按位取反、左移、右移和無符號(hào)右移,這些運(yùn)算符在判斷奇偶、交換變量、計(jì)算絕對(duì)值、判斷是否為2的冪以及快速計(jì)算2的冪次方等方面有廣泛應(yīng)用,需要的朋友可以參考下
    2025-04-04
  • java讀取properties配置文件的方法

    java讀取properties配置文件的方法

    這篇文章主要介紹了java讀取properties配置文件的方法,涉及java操作properties配置文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Java 淺復(fù)制和深復(fù)制的實(shí)例詳解

    Java 淺復(fù)制和深復(fù)制的實(shí)例詳解

    這篇文章主要介紹了Java 淺復(fù)制和深復(fù)制的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • java中對(duì)象調(diào)用成員變量與成員實(shí)例方法

    java中對(duì)象調(diào)用成員變量與成員實(shí)例方法

    在本篇文章里小編給各位分享的是關(guān)于java中對(duì)象調(diào)用成員變量與成員實(shí)例方法,需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • IDEA全局查找關(guān)鍵字的用法解讀

    IDEA全局查找關(guān)鍵字的用法解讀

    這篇文章主要介紹了IDEA全局查找關(guān)鍵字的用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • mybatis如何實(shí)現(xiàn)繼承映射

    mybatis如何實(shí)現(xiàn)繼承映射

    這篇文章主要介紹了mybatis如何實(shí)現(xiàn)繼承映射的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot統(tǒng)一響應(yīng)格式及統(tǒng)一異常處理

    SpringBoot統(tǒng)一響應(yīng)格式及統(tǒng)一異常處理

    在我們開發(fā)SpringBoot后端服務(wù)時(shí),一般需要給前端統(tǒng)一響應(yīng)格式,本文主要介紹了SpringBoot統(tǒng)一響應(yīng)格式及統(tǒng)一異常處理
    2023-05-05
  • SpringCloud OpenFeign與Ribbon客戶端配置詳解

    SpringCloud OpenFeign與Ribbon客戶端配置詳解

    在springcloud中,openfeign是取代了feign作為負(fù)載均衡組件的,feign最早是netflix提供的,他是一個(gè)輕量級(jí)的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負(fù)載均衡機(jī)制,因此feign可以作為一個(gè)負(fù)載均衡的遠(yuǎn)程服務(wù)調(diào)用框架使用
    2022-11-11

最新評(píng)論

灵寿县| 久治县| 固阳县| 柳州市| 黄梅县| 焉耆| 甘德县| 四子王旗| 扎兰屯市| 蓬安县| 阿尔山市| 武冈市| 冕宁县| 咸阳市| 措勤县| 观塘区| 大厂| 大名县| 永和县| 离岛区| 秭归县| 平阴县| 崇左市| 阳高县| 鱼台县| 望奎县| 临朐县| 龙川县| 沽源县| 黔南| 赤峰市| 沛县| 昭觉县| 盘山县| 阆中市| 太仆寺旗| 三明市| 贵德县| 象州县| 滁州市| 清苑县|