Semaphore
说明:计数信号量
常用方法说明
// 构造器初始化许可证数量的构造函数
Semaphore(permits)
// 初始化许可证数量和是否公平模式的构造函数
Semaphore(permits,fair)
// 是否公平模式FIFO
isFair()
// 获取当前可用的许可证数量
availablePermits()
// 当前线程尝试去阻塞的获取1个许可证。
// 此过程是阻塞的,它会一直等待许可证,直到发生以下任意一件事:
// 当前线程获取了1个可用的许可证,则会停止等待,继续执行。
// 当前线程被中断,则会抛出InterruptedException异常,并停止等待,继续执行。
acquire()
// 当前线程尝试去阻塞的获取permits个许可证。
// 此过程是阻塞的,它会一直等待许可证,直到发生以下任意一件事:
// 当前线程获取了n个可用的许可证,则会停止等待,继续执行。
// 当前线程被中断,则会抛出InterruptedException异常,并停止等待,继续执行。
acquire(permits)
// 当前线程尝试去阻塞的获取1个许可证(不可中断的)。
// 此过程是阻塞的,它会一直等待许可证,直到发生以下任意一件事:
// 当前线程获取了1个可用的许可证,则会停止等待,继续执行。
acquierUninterruptibly()
// 当前线程尝试去阻塞的获取permits个许可证。
// 此过程是阻塞的,它会一直等待许可证,直到发生以下任意一件事:
// 当前线程获取了n个可用的许可证,则会停止等待,继续执行。
acquireUninterruptibly(permits)
// 当前线程尝试去获取1个许可证。
// 此过程是非阻塞的,它只是在方法调用时进行一次尝试。
// 如果当前线程获取了1个可用的许可证,则会停止等待,继续执行,并返回true。
// 如果当前线程没有获得这个许可证,也会停止等待,继续执行,并返回false。
tryAcquire()
// 当前线程尝试去获取permits个许可证。
// 此过程是非阻塞的,它只是在方法调用时进行一次尝试。
// 如果当前线程获取了permits个可用的许可证,则会停止等待,继续执行,并返回true。
// 如果当前线程没有获得permits个许可证,也会停止等待,继续执行,并返回false。
tryAcquire(permits)
// 当前线程在限定时间内,阻塞的尝试去获取1个许可证。
// 此过程是阻塞的,它会一直等待许可证,直到发生以下任意一件事:
// 当前线程获取了可用的许可证,则会停止等待,继续执行,并返回true。
// 当前线程等待时间timeout超时,则会停止等待,继续执行,并返回false。
// 当前线程在timeout时间内被中断,则会抛出InterruptedException一次,并停止等待,继续执行。
tryAcquire(timeout,TimeUnit)
// 当前线程在限定时间内,阻塞的尝试去获取permits个许可证。
// 此过程是阻塞的,它会一直等待许可证,直到发生以下任意一件事:
// 当前线程获取了可用的permits个许可证,则会停止等待,继续执行,并返回true。
// 当前线程等待时间timeout超时,则会停止等待,继续执行,并返回false。
// 当前线程在timeout时间内被中断,则会抛出InterruptedException一次,并停止等待,继续执行。
tryAcquire(permits,timeout,TimeUnit)
// 当前线程释放1个可用的许可证。
release()
// 当前线程释放permits个可用的许可证。
release(permits)
// 当前线程获得剩余的所有可用许可证
drainPermits()
// 判断当前Semaphore对象上是否存在正在等待许可证的线程。
hasQueuedThreads()
// 获取当前Semaphore对象上是正在等待许可证的线程数量。
getQueueLength()
使用心得
工作中自己是先获取信号量再加入线程池中
网友评论