CountDownLatch详解

简介

允许一个至多个线程等待,直到一组在其他线程中执行的操作被完成,换句话说,即某个任务的执行,需要等到多个线程都执行完毕之后才可以进行
用一个给定的count去初始化CountDownLatch ,本质上是AQS里的state值
await方法会阻塞直到因为调用countDown方法而使当前的count到达0,之后所有等待的线程都会被释放,而且任何后续的await调用都会立即返回,因为count已经到达0,所以线程不再等待
count无法被重置,一旦初始化之后就不能再设置值,如果要重新设置值,可以使用CyclicBarrier
CountDownLatch 是一个多功能的同步工具,可以有多种用途
初始化count被设置为1的CountDownLatch 可以被当做一个简单的开关锁或者门,所有调用了await方法的线程都会在门处等待直到门被一个调用了countDown方法的线程打开,
初始化count为N的CountDownLatch 可以让一个线程等待直到N个线程完成了某个操作或者某个操作已经被完成N次
CountDownLatch不要求调用了countDown的线程要等到count为0才可以继续运行,它只是简单地阻止其他想继续前行通过await的线程一直到所有线程都运行完,也就是说await是一道栅栏,要等到栅栏里的所有线程都完成任务(count就变为0了),才打开栅栏放后面的线程前进,如果栅栏里的线程没运行完,则后面的线程要一直被拦在外面,而且一旦栅栏打开,就永远不会被关上(栅栏只关上一次,即初始化count一次)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值