0%

Semaphore是基于AQS共享锁来实现,默认采用非公平锁。Semaphore 类似于操作系统中的信号量,可以控制对互斥资源的访问线程数。

Semaphore用于限制可以访问某些资源(物理或逻辑的)的线程数目,其维护了一个许可证集合,有多少资源限制就维护多少许可证集合,假如这里有N个资源,那就对应于N个许可证,同一时刻也只能有N个线程访问。一个线程获取许可证就调用acquire方法,用完了释放资源就调用release方法。

可以在构造方法中指定是公平锁还是非公平锁

阅读全文 »

CyclicBarrier基于AQS的Condition来实现。

相比CountDownLatch,CyclicBarrier 可以有不止一个栅栏,因为它的栅栏(Barrier)可以重复使用(Cyclic)。

CyclicBarrier允许一组线程在到达某个栅栏点(common barrier point)互相等待,直到最后一个线程到达栅栏点,栅栏才会打开,处于阻塞状态的线程恢复继续执行。

阅读全文 »

CountDownLatch基于AQS的共享模式,用来控制一个或者多个线程等待多个线程

CountDownLatch使用一个计数器进行实现。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。

阅读全文 »

ReentrantLock基于AQS的独占模式,默认采用非公平锁,是一种可重入锁。

可以在构造方法中指定是公平锁还是非公平锁

阅读全文 »

所谓AQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁一系列依赖FIFO等待队列的同步器的框架ReentrantLockSemaphoreCountDownLatchCyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。

阅读全文 »