CountDownLatch 并发工具类

java.util.concurrent.CountDownLatch 允许一个或多个线程等待其他线程完成操作
它的API:
    构造方法: public CountDownLatch(int count) 初始化一个指定计数器的CountDownLatch对象
    成员方法:
        - public void await()  让当前线程等待(当计数器的数值为0,那么等待结束)
        - pulic void countDown()  计数器进行 减 1 操作
例如:线程1要执行打印:A和C,线程2要执行打印:B
    但是要求线程1打印C之前,一定要打印B
分析:
    线程1:
        任务:
            打印A
            调用await方法 进入等待(等待线程2执行打印)
            打印C
    线程2:
        任务:
        调用countDown方法,让计数器 -1
注意:
    1.创建CountDownLatch对象的计数器初始值为 1

public class Thread1 extends Thread{
    // 定义 CountDownLatch cdl 为成员变量
    CountDownLatch cdl ;

    // 定义带参构造方法,这样 初始化线程的时候就可以把 CountDownLatch cdl对象加进来

    public Thread1(CountDownLatch cdl) {
        this.cdl = cdl;
    }

    @Override
    public void run() {
        System.out.println("打印A");
        try {
            cdl.await();    // 等待计数器变成 0 --》等待线程2执行完之后计数器 -1 这里就会开始执行
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("打印C");
    }
}
public class Thread2 extends Thread{
    CountDownLatch cdl;

    public Thread2(CountDownLatch cdl) {
        this.cdl = cdl;
    }

    @Override
    public void run() {
        System.out.println("打印B...");
        cdl.countDown();    // 计数器 -1

    }
}
public class Tests {

    // 创建 CountDownLatch 对象,指定计数器的值为 1
    public static void main(String[] args) {

        CountDownLatch cdl = new CountDownLatch(1);
        // 创建两个线程分别执行打印操作
        new Thread1(cdl).start();


        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        new Thread2(cdl).start();
    }

CountDownLatch 中的 countdown倒数的意思
  latch 翻译过来是门闩
  整体含义可以理解为倒数的门闩,【三二一,芝麻开门】
CountDownLatch是通过一个计数器来实现的,每当一个线程完成了自己的任务后,
  可以调用countdown方法让计数器 -1.当计数器到达 0 的时候调用CountDownLatch
await 方法的线程阻塞状态解除,继续执行
调用await方法的线程会被挂起,它会等待直到count值为0的时候才继续执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值