Java---CountDownLatch

概念

CountDownLatch是在jdk1.5的时候引入的,位于java.util.concurrent并发包中,CountDownLatch叫做闭锁.
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其它线程执行完后再执行.

工作原理

CountDownLatch是通过一个计数器来实现的,计数器的初始化值为线程的数量.每当一个线程完成了自己的任务后,计数器的值相应的减1.当计数器的值减到0时,表示所有的线程都已完成任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务.

常用方法

  1. public CountDownLatch(int count)
    CountDownLatch接收一个int型的参数,表示要等待的工作线程的个数
  2. public void await()
    使当前线程进入同步队列等待,直到计数器的值减到0或者当前线程被中断,当前线程就会被唤醒.
  3. public boolean await(long timeout,TimeUnit unit)
    带超时时间的await()
  4. public void CountDown()
    使计数器的值减1,如果减到了0,则会唤醒所有等待在这个CountDownLatch上的线程.
  5. public long getCount()
    获取CountDownLatch的数值,也就是计数器的值

使用场景

  1. 实现最大的并行性:
    有时我们想同时启动多个线程,实现最大程度的并行性.如果我们创建一个初始计数器为1的CountDownLatch,多个线程在开始执行任务前首先CountDownLatch.await()在这个锁上等待,只需要主线程调用一次CountDown()方法就可以让其它所有等待的线程同时恢复执行.类似于赛跑,将多个线程放到起点,等待发令枪响,然后同时开跑.
  2. 开始执行前等待N个线程完成各自的任务后,进行汇总合并:
    例如,我们需要使用多线程统计完所有的数据之后,做一个汇总,就可以使用CountDownLatch

缺点

CountDownLatch是一次性的,计数器的值只能在构造方法中初始化一次,之后不能再次对其设置值,当CountDownLatch使用完毕后,它不能再次被使用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值