-
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