CountDownLatch、CyclicBarrier和Semaphore

三个并发编程中的辅助类

CountDownLatch

主要实现类似计数器的功能,比方说共有N个工作线程,主线程需要等待N个工作线程都完成之后才能继续运行,类似这样的场景就可以用到CountDownLatch。
主要有两个方法:countDown和await。开始时初始化一个CountDownLatch,并初始化计数值,该对象作为一个共享变量对每个关注的线程可见,每个工作线程完成之后调用countDown将计数器减一,然后继续后续的工作。主线程则调用await阻塞等待至计数器为0,然后再继续后面的工作。
CountDownLatch使用一次后不能重复使用。这是与后面的CyclicBarrier区别的地方,后者可以重用。

CyclicBarrier

也称回环栅栏,该工具的作用是对并发工作的N个线程,保证每个线程在工作到某个特定的状态之后停下来,直到所有的N的线程都到达了指定的状态,再分别各自开始运行。
使用方式上,先是生成一个共享的CyclicBarrier对象,并初始化关注N个对象;然后在N个线程中的某个指定的状态之后调用CyclicBarrier的await。
另外CyclicBarrier是可以重用的。

Semaphore

也称信号量,应用在控制某类资源最多同时被访问的数量的场景。初始化时设置最多的同时访问者数量,
主要方法:

public void acquire() throws InterruptedException {  }     //获取一个许可
public void acquire(int permits) throws InterruptedException { }    //获取permits个许可
public void release() { }          //释放一个许可
public void release(int permits) { }    //释放permits个许可

上述是阻塞版本,还有非阻塞版本这里就不提了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值