Java 线程并发 常用辅助类 (一) CountDownLatch

首先jdk 定义

CountDownLatch:

允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。

CountDownLatch用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用CyclicBarrier 。

CountDownLatch是一种通用的同步工具,可用于多种用途。 一个CountDownLatch为一个计数的CountDownLatch用作一个简单的开/关锁存器,或者门:所有线程调用await在门口等待,直到被调用countDown()的线程打开。 一个CountDownLatch初始化N可以用来做一个线程等待,直到N个线程完成某项操作,或某些动作已经完成N次。

CountDownLatch一个有用的属性是,它不要求调用countDown线程等待计数到达零之前继续,它只是阻止任何线程通过await ,直到所有线程可以通过。

构造方法:

构造方法
Constructor and Description
CountDownLatch(int count)

构造一个以给定计数 CountDownLatch CountDownLatch。

所有方法接口方法具体的方法

Modifier and TypeMethod and Description
voidawait()

导致当前线程等到锁存器计数到零,除非线程是 interrupted 。

booleanawait(long timeout, TimeUnit unit)

使当前线程等待直到锁存器计数到零为止,除非线程为 interrupted或指定的等待时间过去。

voidcountDown()

减少锁存器的计数,如果计数达到零,释放所有等待的线程。

longgetCount()

返回当前计数。

StringtoString()

返回一个标识此锁存器的字符串及其状态。

最后上代码:

代码示范:

public class CountDownLatchDemo {

    public static void main(String[] args) throws InterruptedException {
        //初始化计数器
        CountDownLatch countDownLatch=new CountDownLatch(6);  

        new Thread(()->{
            for(int a=0;a<6;a++){
                System.out.println(a);
                countDownLatch.countDown();   //计数器减一
            }
        }).start();
        countDownLatch.await();  //计数器归零往下处理
        System.out.println("结束了");
    }

细节:

CountDownLatch.countDown() ----数量减一

countDownLatch.await(); -----当数量为零,被唤醒

下一个辅助类:CyclicBarrier

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值