前言
由于Java高级并发编程主要是针对多线程并发访问公共资源控制来展开的,而现在服务器大多都是多核处理,所以在执行控制中,单一的同步锁无法满足需要,为此Java 1.5开始引入了三个重要的概念Semaphores,CountDownLatch和CyclicBarrier其实这三个实现类都是基于以整型原子操作状态值操作的执行控制类。
严格意义上讲,它们都是对原子操作int类型表示状态来控制锁操作的封装。我们知道,在原子类型操作中,我们避免了使用锁机制而采用CAS机制达到了操作的原子性不可中断,从而乐观的实现了共享资源的访问。
但是在我们现实开发中,有很多场景需要对多个操作进行分组控制,也就是说允许指定数量的线程进入临界区操作。
这种情况常见于各类池化原理实现上。比如我们有一个提供多线程处理的服务,每次允许5个客户端接入,超过5个就需要排队等待。
如此我们就需要一个组控制机制来实现。为此我们可以封装一个由原子int类型变量表示的计数器,由这个计数器来统计每次进入临界区的线程数量,通过原子读取和增减来决定等待队列线程的获取进入许可,同时当线程离开临界区后,将计数器恢复。
依次来实现对线程的组控制。