Semaphore用法随笔

字数 314阅读 341
  • Semaphore用于限制线程并发的数量

  • Semaphore中的acquire()方法意思是使用一个许可,是一个减法操作。
  • Semaphore中的release()方法意思是增加一个许可,增加同时间允许通过的线程数,Semaphore允许通过的线程数是可以改变的。
  • Semaphore的availablePermits()返回当前允许通过的线程数。
  • semaphore.acquireUninterruptibly();在等待release()的时候不允许被中断。如果使用这段代码,在当前代码到执行release()方法之间,不允许中断。
  • semaphore.drainPermits()清空当前允许通过的线程数,并且返回当前允许的数目。
  • semaphore.hasQueuedThreads()是否还有线程在等待。
  • semaphore.getQueueLength()获取还在等待的线程数。
  • tryAcquire()尝试获取许可。
    tryAcquire(3)尝试获取3个许可。
    tryAcquire(3, TimeUnit.SECONDS)在3内获取1个许可,获取不到返回false。
    tryAcquire(3,3,TimeUnit.SECONDS)在3秒内获取3个许可,获取不到返回false。
  • Semaphore(1,true)构造函数如果是true为公平锁获取,如果是flase则为非公平锁。

下面是Semaphore练习代码

链接:链接:https://pan.baidu.com/s/1jIJ3oNk 密码:myli

Semaphore练习

推荐阅读更多精彩内容