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

Java CountDownLatch與CyclicBarrier及Semaphore使用教程

 更新時間:2023年01月04日 08:34:48   作者:欲無緣  
對于并發(fā)執(zhí)行,Java中的CountDownLatch是一個重要的類。為了更好的理解CountDownLatch這個類,本文將通過例子和源碼帶領(lǐng)大家深入解析CountDownLatch與CyclicBarrier及Semaphore的原理,感興趣的可以學習一下

CountDownLatch

CountDownLatch是一個倒數(shù)的計數(shù)器閥門,初始化時閥門關(guān)閉,指定計數(shù)的數(shù)量,當數(shù)量倒數(shù)減到0時閥門打開,被阻塞線程被喚醒。

public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
    // 總數(shù)是6,必須要執(zhí)行任務(wù)的時候,再使用    !
    CountDownLatch countDownLatch = new CountDownLatch(6);
    for (int i = 1; i <=6 ; i++) {    
        new Thread(()->{
        System.out.println(Thread.currentThread().getName()+" Go out");
        countDownLatch.countDown(); // 數(shù)量-1
        },String.valueOf(i)).start();
    }  
    countDownLatch.await(); // 等待計數(shù)器歸零,然后再向下執(zhí)行
    System.out.println("Close Door");
    }
}

原理

countDownLatch.countDown();//數(shù)量-1

countDownLatch.await();//等待

每次有線程調(diào)用 countDown() 數(shù)量-1,假設(shè)計數(shù)器變?yōu)?,countDownLatch.await() 就會被喚醒,繼續(xù)執(zhí)行!

CyclicBarrier

CyclicBarrier是一個可循環(huán)的屏障,它允許多個線程在執(zhí)行完相應(yīng)的操作后彼此等待共同到達一個point,等所有線程都到達后再繼續(xù)執(zhí)行。

CyclicBarrier也可以像CountDownLatch一樣適用于多個子任務(wù)并發(fā)執(zhí)行,當所有子任務(wù)都執(zhí)行完后再繼續(xù)接下來的工作。

public class CyclicBarrierDemo {
    public static void main(String[] args) {
         // 召喚龍珠的線程
        CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{
            System.out.println("召喚神龍成功!");
        });
        for (int i = 1; i <=7 ; i++) {
            final int temp = i;
            // lambda能操作到 i 嗎
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"收集"+temp+"個龍珠");
                try {
                cyclicBarrier.await(); // 等待
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}

Semaphore

Semaphore翻譯過來是信號量的意思,它的作用是控制多個線程對同一個資源的訪問線程數(shù)量。比如在停車場停車,里面有10個車位,當這10個車位被停滿的時候其他的車只能等待(堵塞)里面有車駛出(release)然后再進入。

public class SemaphoreDemo {
    public static void main(String[] args) {
        // 線程數(shù)量:停車位! 限流!
        Semaphore semaphore = new Semaphore(3);
        for (int i = 1; i <=6 ; i++) {
            new Thread(()->{
            // acquire() 得到
            try {
                semaphore.acquire();
                System.out.println(Thread.currentThread().getName()+"搶到車位");
                TimeUnit.SECONDS.sleep(2);
                System.out.println(Thread.currentThread().getName()+"離開車位");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                semaphore.release(); // release() 釋放
            }
        },String.valueOf(i)).start();
        }
    }
}

semaphore.acquire();獲得,假設(shè)如果已經(jīng)滿了,等待,等待被釋放為止!

semaphore.release();釋放,會將當前的信號量釋放 + 1,然后喚醒等待的線程!

作用: 多個共享資源互斥的使用!并發(fā)限流,控制最大的線程數(shù)!

到此這篇關(guān)于Java CountDownLatch與CyclicBarrier及Semaphore使用教程的文章就介紹到這了,更多相關(guān)Java CountDownLatch內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis中關(guān)于mapper的使用以及注意事項

    mybatis中關(guān)于mapper的使用以及注意事項

    這篇文章主要介紹了mybatis中關(guān)于mapper的使用以及注意事項,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java中簡單的截取分割字符串實例

    java中簡單的截取分割字符串實例

    下面小編就為大家?guī)硪黄猨ava中簡單的截取分割字符串實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 使用Swagger時Controller中api接口顯示不全的問題分析及解決

    使用Swagger時Controller中api接口顯示不全的問題分析及解決

    swagger是一個十分好用的api接口管理、測試框架,現(xiàn)在越來越多的人使用這個做接口的測試和管理,但經(jīng)常遇到Controller中的api接口顯示不全的問題,所以本文給大家詳細分析了問題以及解決方法,需要的朋友可以參考下
    2024-02-02
  • 解決JPA @OneToMany及懶加載無效的問題

    解決JPA @OneToMany及懶加載無效的問題

    這篇文章主要介紹了解決JPA @OneToMany及懶加載無效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java導出Word文檔的實現(xiàn)方法詳解

    Java導出Word文檔的實現(xiàn)方法詳解

    這篇文章主要給大家介紹了關(guān)于Java導出Word文檔的實現(xiàn)方法,在日常的開發(fā)工作中,我們時常會遇到導出Word文檔報表的需求,比如公司的財務(wù)報表、醫(yī)院的患者統(tǒng)計報表、電商平臺的銷售報表等等,需要的朋友可以參考下
    2023-08-08
  • springboot單元測試兩種方法實例詳解

    springboot單元測試兩種方法實例詳解

    這篇文章主要介紹了springboot單元測試兩種方法實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 淺談Java當作數(shù)組的幾個應(yīng)用場景

    淺談Java當作數(shù)組的幾個應(yīng)用場景

    數(shù)組可以存放多個同一類型的數(shù)據(jù),可以存儲基本數(shù)據(jù)類型,引用數(shù)據(jù)類型(對象),下面這篇文章主要給大家介紹了關(guān)于Java當作數(shù)組的幾個應(yīng)用場景,需要的朋友可以參考下
    2022-11-11
  • SpringBoot?基于?MongoTemplate?的工具類過程詳解

    SpringBoot?基于?MongoTemplate?的工具類過程詳解

    MongoDB是一個高性能,開源,無模式的文檔型數(shù)據(jù)庫,是當前NoSql數(shù)據(jù)庫中比較熱門的一種,這篇文章主要介紹了SpringBoot基于MongoTemplate的工具類,需要的朋友可以參考下
    2023-09-09
  • Spring?Boot接口支持高并發(fā)具體實現(xiàn)代碼

    Spring?Boot接口支持高并發(fā)具體實現(xiàn)代碼

    這篇文章主要給大家介紹了關(guān)于Spring?Boot接口支持高并發(fā)具體實現(xiàn)的相關(guān)資料,在SpringBoot項目中通常我們沒有處理并發(fā)問題,但是使用項目本身還是支持一定的并發(fā)量,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于spring事務(wù)傳播行為非事務(wù)方式的理解

    關(guān)于spring事務(wù)傳播行為非事務(wù)方式的理解

    這篇文章主要介紹了對spring事務(wù)傳播行為非事務(wù)方式的全面理解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

清远市| 信宜市| 法库县| 栾城县| 垦利县| 越西县| 左权县| 库尔勒市| 昌宁县| 南投市| 阳东县| 隆昌县| 兰考县| 青田县| 如皋市| 堆龙德庆县| 个旧市| 威远县| 墨玉县| 通城县| 临西县| 开阳县| 弥勒县| 留坝县| 红桥区| 海晏县| 日土县| 手游| 北碚区| 雷波县| 澄江县| 霍城县| 宜兰县| 达孜县| 栾城县| 观塘区| 武隆县| 汝州市| 桃源县| 甘洛县| 灌南县|