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