java.util.concurrent
类 Semaphore
API介绍:
一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire()
,然后再获取该许可。每个release()
添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore
只对可用许可的号码进行计数,并采取相应的行动。
其实该类的aquire和release方法类似于Codition的await和signal,但是Semaphore对象可以控制当前线程的运行数量而Condition不能做到
应用情景:服务器线程访问资源可以用Semaphore来限制访问线程的数量
构造方法摘要 |
||||
Semaphore(int permits) 创建具有给定的许可数和非公平的公平设置的 Semaphore。 |
||||
Semaphore(int permits, boolean fair) 创建具有给定的许可数和给定的公平设置的 Semaphore。 |
||||
方法摘要 |
||||
void |
||||
void |
acquire(int permits) 从此信号量获取给定数目的许可,在提供这些许可前一直将线程阻塞,或者线程已被中断。 |
|||
void |
acquireUninterruptibly() 从此信号量中获取许可,在有可用的许可前将其阻塞。 |
|||
void |
acquireUninterruptibly(int permits) 从此信号量获取给定数目的许可,在提供这些许可前一直将线程阻塞。 |
|||
int |
availablePermits() 返回此信号量中当前可用的许可数。 |
|||
int |
drainPermits() 获取并返回立即可用的所有许可。 |
|||
protected Collection<Thread> |
getQueuedThreads() 返回一个 collection,包含可能等待获取的线程。 |
|||
int |
getQueueLength() 返回正在等待获取的线程的估计数目。 |
|||
boolean |
hasQueuedThreads() 查询是否有线程正在等待获取。 |
|||
boolean |
isFair() 如果此信号量的公平设置为 true,则返回 true。 |
|||
protected void |
reducePermits(int reduction) 根据指定的缩减量减小可用许可的数目。 |
|||
void |
release() 释放一个许可,将其返回给信号量。 |
|||
void |
release(int permits) 释放给定数目的许可,将其返回到信号量。 |
|||
toString() 返回标识此信号量的字符串,以及信号量的状态。 |
||||
boolean |
tryAcquire() 仅在调用时此信号量存在一个可用许可,才从信号量获取许可。 |
|||
boolean |
tryAcquire(int permits) 仅在调用时此信号量中有给定数目的许可时,才从此信号量中获取这些许可。 |
|||
boolean |
tryAcquire(int permits, long timeout,TimeUnit unit) 如果在给定的等待时间内此信号量有可用的所有许可,并且当前线程未被中断,则从此信号量获取给定数目的许可。 |
|||
boolean |
tryAcquire(long timeout,TimeUnit unit) 如果在给定的等待时间内,此信号量有可用的许可并且当前线程未被中断,则从此信号量获取一个许可。 |
运行结果如下:
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
原文:http://blog.csdn.net/pyz_tech/article/details/23710683