前言
上节我们介绍了Java中的并发工具类CountDownLatch和Cyclicbarrier,今天我们再来说说另外两个并发工具类:Semaphore(信号量)和Exchanger(交换者),首先我们先来说说信号量这个东西,结合我们今天所讲的,我们了解下,这个东西到底有啥用,话不多说,让我们开启今天的并发之旅吧。
什么是信号量?
信号量是用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用公共资源。
这样说可能大家不是很理解,那我就举个生活中常见的场景,结合场景描述下Semaphore这个东西:
我们大家都去过大型商场,都知道商场都有自己的停车场,假设一个停车场允许的最大停车数量是200,当我们到达停车场时,会发现上面显示着剩余车位,如果剩余车位>0,那么栏杆会扫描完车牌放行,如果剩余车位=0,则说明已没有能使用的车位,此时就不放行,所以进入商场的车都需要排队等候,当里面有离开停车场,离开n辆就会放行n辆,这里用来控制是否放行的剩余车位数就可以理解为是一个信号量指示,成功扫描,或者拿到停车票的车子就能进入,他用来控制当前进入商场的车是否能放行。
如何使用信号量?
使用信号量我们首先要创建一个信号量
public Semaphore(int permits) {
sync = new NonfairSync(permits);
}
然后就可以调用Semaphore的相关方法,主要有如下几个方法:
// 获取一个信号量许可证
public void acquire()