Semaphore 信号量
一个Semaphore维护了一组许可,许可数量通过构造方法指定。
每一个 acquire方法都将会阻塞直到有一个可用的许可。
每一个 release方法释放所持有的许可,并通知正在阻塞等待获取许可的线程。
Semaphore经常用于限制访问某个资源的线程数量。
当一个Semaphore被初始化为1个许可时,可以用作互斥锁,或者叫binary semaphore,这种锁可以被一个线程释放而不是锁的拥有者,在某些情况下这个特性将会很有用,比如从死锁中恢复。
构造方法中有一个参数fairness用来指定是公平锁还是非公平锁,当设置为false时,非公平锁策略将会发挥作用,等待获取锁的队列里面的请求者,都有平等的机会获取锁;当设置为true时,公平锁策略将会发挥作用,等待获取锁的队列里面的请求者中将按FIFO的原则先进入队列的请求者将获取锁。