欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、CountDownLatch概述

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

CountDownLatch主要有兩個方法:

(1)、當一個或多個線程調用await方法時,調用線程會被阻塞.

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

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

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

代碼

import java.util.concurrent.CountDownLatch;
/**
 * @description:  模擬員工下班關門案例
 * @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" + "忙完工作,下班。");
                //計數器減1
                countDownLatch.countDown();
            },"員工編號:"+String.valueOf(i)).start();
        }
        //當計數器的值變?yōu)?,因調用await方法被阻塞的線程會被喚醒,繼續(xù)執(zhí)行
        countDownLatch.await();
        System.out.println(Thread.currentThread().getName() + "\t值班人員鎖門離開公司");
    }
}

輸出結果如下圖:

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

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

代碼

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;//員工編號
    @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" + "忙完工作,下班。");
                //計數器減1
                countDownLatch.countDown();
            },EmpEnum.forEach(i).getName()).start();
        }
        //當計數器的值變?yōu)?,因調用await方法被阻塞的線程會被喚醒,繼續(xù)執(zhí)行
        countDownLatch.await();
        System.out.println(Thread.currentThread().getName() + "\t值班人員鎖門離開公司");
    }
}

輸出結果如下圖:

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 如何在JAVA中使用Synchronized

    如何在JAVA中使用Synchronized

    這篇文章主要介紹了如何在JAVA中使用Synchronized,文中代碼非常詳細,對大家的學習有所幫助,感興趣的朋友可以參考下
    2020-06-06
  • Spring RedisTemplate 批量獲取值的2種方式小結

    Spring RedisTemplate 批量獲取值的2種方式小結

    這篇文章主要介紹了Spring RedisTemplate 批量獲取值的2種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java list利用遍歷進行刪除操作3種方法解析

    Java list利用遍歷進行刪除操作3種方法解析

    這篇文章主要介紹了Java list利用遍歷進行刪除操作3種方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • java使用鏈表實現約瑟夫環(huán)

    java使用鏈表實現約瑟夫環(huán)

    這篇文章主要為大家詳細介紹了java使用鏈表實現約瑟夫環(huán),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Java之Jackson使用案例詳解

    Java之Jackson使用案例詳解

    這篇文章主要介紹了Java之Jackson使用案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • SpringBoot定時任務詳解與案例代碼

    SpringBoot定時任務詳解與案例代碼

    SpringBoot是一個流行的Java開發(fā)框架,它提供了許多便捷的特性來簡化開發(fā)過程,其中之一就是定時任務的支持,讓開發(fā)人員可以輕松地在應用程序中執(zhí)行定時任務,本文將詳細介紹如何在Spring?Boot中使用定時任務,并提供相關的代碼示例
    2023-06-06
  • Java中Arrays.sort自定義一維數組、二維數組的排序方式

    Java中Arrays.sort自定義一維數組、二維數組的排序方式

    這篇文章主要介紹了Java中Arrays.sort自定義一維數組、二維數組的排序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot項目網頁加載出現Whitelabel?Error?Page的解決

    SpringBoot項目網頁加載出現Whitelabel?Error?Page的解決

    這篇文章主要介紹了SpringBoot項目網頁加載出現Whitelabel?Error?Page的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • springboot]logback日志框架配置教程

    springboot]logback日志框架配置教程

    這篇文章主要介紹了springboot]logback日志框架配置,logback既可以通過application配置文件進行日志的配置,又可以通過logback-spring.xml進行日志的配置,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2022-04-04
  • Windows使用多個JDK的方法詳解

    Windows使用多個JDK的方法詳解

    本文介紹了如何在Windows系統中同時使用多個JDK版本(JDK8和JDK21),并詳細描述了修改環(huán)境變量和Path變量的步驟,以實現JDK版本的切換
    2024-12-12

最新評論