Semaphore
信号量,用于实现资源限流的工具类,允许多个线程同时访问同一临界区
信号量模型,一个计数器,一个等待队列,三个方法
三个方法,
- init(),设置计数器的初始值
- down(), 计数器值减一,计数器值<0,线程阻塞,加入等待队列
- up(), 计数器值加一,计数器值<=0,唤醒等待队列中的一个线程,从队列中移除
上述三个方法都是原子性的,是由信号量模型的实现方来保证的。
java中通过Semaphore实现信号量,借助acquire() 和 release() 来控制线程是否能访问资源。
当计数器值变为0时,表示临界资源已经被申请完毕,无法再被线程获取。
Semaphore 使用场景:
限流器(对象池,连接池)
//todo 写一个Semaphore管理对象池的限流器例子