多线程条件通行工具——CountDownLatch

CountDownLatch的作用是,线程进入等待后,需要计数器达到0才能通行。

  • CountDownLatch(int)
    构造方法,指定初始计数。
  • await()
    等待计数减至0。
  • await(long, TimeUnit)
    在指定时间内,等待计数减至0。
  • countDown()
    计数减1。
  • getCount()
    获取剩余计数。
例子

//使用4个子线程求出1到100的和。且每个子线程只能计算25个数。主线程必须等待子线程的计算结果。
class QiuHe extends Thread{
    int index; //线程编号
    int sum=0; //保存每个线程所求的25个数的和值

    CountDownLatch countDownLatch;//多线程条件通行工具

    QiuHe(int nindex, CountDownLatch countDownLatch){
        index=nindex;
        this.countDownLatch = countDownLatch;
    }
    public void run() {
        for(int i=0;i<25;i++) {
            sum=sum+index*25+i+1;
        }
        // 标记计算结束,结束则countDownLatch减一
        countDownLatch.countDown();
    }
}
class test1 {
    public static void main(String args[]) {

        CountDownLatch countDownLatch = new CountDownLatch(3);//给定countDownLatch初始值为3

        QiuHe q[]=new QiuHe[4];
        for(int i=0;i<4;i++){
            q[i]=new QiuHe(i, countDownLatch);
            q[i].start();
        }
        try {
            // 等待子线程结束,countDownLatch为0才能运行,不为0则阻塞,所以能实现主线程必须等待子线程的计算结果
            countDownLatch.await();
        } catch (InterruptedException e) {
        }

        System.out.println("sum="+(q[0].sum+q[1].sum+q[2].sum+q[3].sum));
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值