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

Java并發(fā)多線程編程之CountDownLatch的用法

 更新時(shí)間:2023年06月19日 10:18:36   作者:小志的博客  
這篇文章主要介紹了Java并發(fā)多線程編程之CountDownLatch的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、CountDownLatch概述

讓一些線程阻塞直到另外一些完成后才被喚醒。

CountDownLatch主要有兩個(gè)方法:

(1)、當(dāng)一個(gè)或多個(gè)線程調(diào)用await方法時(shí),調(diào)用線程會(huì)被阻塞.

(2)、其他線程調(diào)用countDown方法計(jì)數(shù)器減1(調(diào)用countDown方法時(shí)線程不會(huì)阻塞),當(dāng)計(jì)數(shù)器的值變?yōu)?,因調(diào)用await方法被阻塞的線程會(huì)被喚醒,繼續(xù)執(zhí)行。

二、CountDownLatch代碼示例(模擬員工下班關(guān)門案例)

模擬公司所有員工都下班后,值班人員鎖門離開(kāi)公司。

代碼

import java.util.concurrent.CountDownLatch;
/**
 * @description:  模擬員工下班關(guān)門案例
 * @author: xz
 */
public class CountDownLatchDemo1 {
    public static void main(String[] args) throws InterruptedException {
        closeDoor();
    }
    private static void closeDoor() throws InterruptedException {
        //創(chuàng)建CountDownLatch,初始容量為10,模擬10名員工
        CountDownLatch countDownLatch=new CountDownLatch(10);
        for (int i=1;i<=10;i++){
            new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "\t" + "忙完工作,下班。");
                //計(jì)數(shù)器減1
                countDownLatch.countDown();
            },"員工編號(hào):"+String.valueOf(i)).start();
        }
        //當(dāng)計(jì)數(shù)器的值變?yōu)?,因調(diào)用await方法被阻塞的線程會(huì)被喚醒,繼續(xù)執(zhí)行
        countDownLatch.await();
        System.out.println(Thread.currentThread().getName() + "\t值班人員鎖門離開(kāi)公司");
    }
}

輸出結(jié)果如下圖:

三、CountDownLatch代碼示例(使用枚舉方式模擬員工下班關(guān)門案例)

模擬公司所有員工都下班后,值班人員鎖門離開(kāi)公司。

代碼

import lombok.Getter;
/**
 * @description: 枚舉類,定義10名員工
 * @author: xz
 * */
public enum EmpEnum {
    ONE(1, "劉一"),
    TWO(2, "陳二"),
    THREE(3, "張三"),
    FOUR(4, "李四"),
    FIVE(5, "王五"),
    SIX(6, "趙六"),
    SEVEN(7, "孫七"),
    EIGHT(8, "周八"),
    NINE(9, "吳九"),
    TEN(10, "鄭十");
    @Getter
    private int code;//員工編號(hào)
    @Getter
    private String name;//員工名稱
    EmpEnum(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
    public static EmpEnum forEach(int index) {
        EmpEnum[] EmpEnums = EmpEnum.values();
        for (EmpEnum epmEnum : EmpEnums) {
            if (index == epmEnum.getCode()) {
                return epmEnum;
            }
        }
        return null;
    }
}
public class CountDownLatchDemo2 {
    public static void main(String[] args) throws InterruptedException {
        closeDoor();
    }
    private static void closeDoor() throws InterruptedException {
        //創(chuàng)建CountDownLatch,初始容量為10,模擬10名員工
        CountDownLatch countDownLatch=new CountDownLatch(10);
        for (int i=1;i<=10;i++){
            new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "\t" + "忙完工作,下班。");
                //計(jì)數(shù)器減1
                countDownLatch.countDown();
            },EmpEnum.forEach(i).getName()).start();
        }
        //當(dāng)計(jì)數(shù)器的值變?yōu)?,因調(diào)用await方法被阻塞的線程會(huì)被喚醒,繼續(xù)執(zhí)行
        countDownLatch.await();
        System.out.println(Thread.currentThread().getName() + "\t值班人員鎖門離開(kāi)公司");
    }
}

輸出結(jié)果如下圖:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java中方法重寫(xiě)和方法重載的6個(gè)區(qū)別

    詳解Java中方法重寫(xiě)和方法重載的6個(gè)區(qū)別

    方法重寫(xiě)和方法重載都是面向?qū)ο缶幊讨?,那么方法重?xiě)和方法重載有哪些區(qū)別,本文就詳細(xì)的來(lái)介紹一下,感興趣的可以了解一下
    2022-01-01
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目之在線服裝銷售商城系統(tǒng)的實(shí)現(xiàn)流程

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目之在線服裝銷售商城系統(tǒng)的實(shí)現(xiàn)流程

    基礎(chǔ)掌握怎么樣,用實(shí)戰(zhàn)檢驗(yàn)就知道了,本篇文章手把手帶你用java+SpringBoot+Maven+Vue+mysql實(shí)現(xiàn)一個(gè)在線服裝銷售商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • MyBatis在Mapper中傳遞多個(gè)參數(shù)的四種方法詳解

    MyBatis在Mapper中傳遞多個(gè)參數(shù)的四種方法詳解

    這篇文章主要介紹了MyBatis在Mapper中傳遞多個(gè)參數(shù)的四種方法,文章通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,,需要的朋友可以參考下
    2023-09-09
  • 聊聊SpringCloud和SpringCloudAlibaba的區(qū)別

    聊聊SpringCloud和SpringCloudAlibaba的區(qū)別

    這篇文章主要介紹了SpringCloud和SpringCloudAlibaba的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • IDEA 包轉(zhuǎn)模塊的解決步驟

    IDEA 包轉(zhuǎn)模塊的解決步驟

    很多朋友遇到這樣一個(gè)問(wèn)題,直接在idea拉取代碼,發(fā)現(xiàn)創(chuàng)建的模塊包類型不一樣了,類似這樣的問(wèn)題該如何處理呢?很多朋友向小編求助,在這統(tǒng)一回答大家,需要的朋友參考下本文吧
    2021-06-06
  • 詳解spring中的Aware接口功能

    詳解spring中的Aware接口功能

    Spring的依賴注入的最大亮點(diǎn)是所有的Bean對(duì)Spring容器的存在是沒(méi)有意識(shí)的,我們可以將Spring容器換成其他的容器,Spring容器中的Bean的耦合度因此也是極低的,本文重點(diǎn)給大家介紹spring中的Aware接口,感興趣的朋友一起看看吧
    2022-02-02
  • Kosaraju算法詳解

    Kosaraju算法詳解

    這篇文章主要為大家詳細(xì)介紹了Kosaraju算法,Kosaraju算法可以計(jì)算出一個(gè)有向圖的強(qiáng)連通分量,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • springbean的八種加載方式匯總

    springbean的八種加載方式匯總

    這篇文章主要介紹了springbean的八種加載方式,一種是XML方式聲明bean,使用@Component及其衍生注解@Controller?、@Service、@Repository定義bean,還有其他方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Spring事務(wù)管理方法步驟解析

    Spring事務(wù)管理方法步驟解析

    這篇文章主要介紹了Spring事務(wù)管理方法步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java實(shí)現(xiàn)幾十萬(wàn)條數(shù)據(jù)插入實(shí)例教程(30萬(wàn)條數(shù)據(jù)插入MySQL僅需13秒)

    Java實(shí)現(xiàn)幾十萬(wàn)條數(shù)據(jù)插入實(shí)例教程(30萬(wàn)條數(shù)據(jù)插入MySQL僅需13秒)

    這篇文章主要給大家介紹了關(guān)于Java如何實(shí)現(xiàn)幾十萬(wàn)條數(shù)據(jù)插入的相關(guān)資料,30萬(wàn)條數(shù)據(jù)插入MySQL僅需13秒,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

大厂| 时尚| 江津市| 卢湾区| 云和县| 湖州市| 乐清市| 南城县| 厦门市| 杂多县| 麟游县| 独山县| 新丰县| 海林市| 依安县| 威远县| 仙桃市| 绥滨县| 尉氏县| 鸡东县| 台南县| 营口市| 湟中县| 桃源县| 迁安市| 葫芦岛市| 山阳县| 永平县| 贺兰县| 柘城县| 集贤县| 武鸣县| 启东市| 于都县| 湘潭市| 淄博市| 花垣县| 淅川县| 米泉市| 成都市| 禄丰县|