CountDownLatch的用法

1.CounDownLatch作用:

多线程工具类Countdownlatch的用法:
特点:当我们需要 一个或多个线程 要等待其他线程执行完毕之后再执行时,就可以使用Countdownlatch工具类来完成

2.CountDownLatch的使用:

  • 1.初始化CountDownLatch对象时,会传递一个整型参数count(计数器),这就是要在某些线程等待执行之前要执行的线程个数

  • 例如:现在Thread1,Thread2,Thread3三个线程要在Thread4线程执行之前完成,那么此时参数就是3

  • 2.coundown方法,调用一次该方法,参数count就会-1

  • 3.await()方法,调用该方法的线程,如果count不为0,说明还有线程没执行完,此时调用await方法的线程就会进入等待状态,直到count为0才唤醒

3.案例演示

1.0版银行取钱案例
假设现在有6个人到银行取钱,银行柜员需要这6个人都取完钱她才能下班

public class CountdownlatchDemo {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(6);
        for(int i=0;i<6;i++){
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"客人取钱完毕!");
                countDownLatch.countDown();//count-1,完成了一个线程
                },Integer.toString(i)).start();
        }
        countDownLatch.await();
        System.out.println(Thread.currentThread().getName()+"银行柜员下班");
    }
}

2.0版银行取钱案例
如果这6个人中一个人有事情走了,我们知道银行柜员不可能一直等待,所以我们这时候可以给await方法设置一个等待时长

 public boolean await(long timeout, TimeUnit unit)
          throws InterruptedException {
          return sync.tryAcquireSharedNanos(1, unit.toNanos(timeout));
 }
public class CountdownlatchDemo2 {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(6);
        for(int i=0;i<6;i++){
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"客人取钱完毕!");
                countDownLatch.countDown();//count-1,完成了一个线程
            },Integer.toString(i)).start();
        }
        //规定等待时长3s
        countDownLatch.await(3, TimeUnit.MICROSECONDS);
        System.out.println(Thread.currentThread().getName()+"银行柜员下班");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值