Semaphore

作者: a丶逍遥子 | 来源:发表于2019-07-03 17:26 被阅读0次

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()
    

使用心得

工作中自己是先获取信号量再加入线程池中

相关文章

网友评论

    本文标题:Semaphore

    本文链接:https://www.haomeiwen.com/subject/jhuchctx.html