java命名空间java.util.concurrent类semaphore的类成员方法:
tryacquire定义及介绍
本文导语:
tryacquire
public boolean tryacquire(int permits,
long timeout,
timeunit unit)
throws interruptedexception
如果在给定的等待时间内此信号量有可用的所有许可,并且当前线程未被中断,则从此...
tryacquire
public boolean tryacquire(int permits,
long timeout,
timeunit unit)
throws interruptedexception
- 如果在给定的等待时间内此信号量有可用的所有许可,并且当前线程未被中断,则从此信号量获取给定数目的许可。
获取给定数目的许可(如果提供了)并立即返回,其值为 true
,将可用的许可数减去给定的量。
如果没有足够的可用许可,则在发生以下三种情况之一前,禁止将当前线程用于线程安排目的并使其处于休眠状态:
- 其他某些线程调用此信号量的某个
释放
方法,当前线程是下一个被分配许可的线程,并且可用许可的数目满足此请求;或者
- 其他某些线程中断当前线程;或者
- 已超出指定的等待时间。
如果获取了许可,则返回值为 true
。
如果当前线程:
- 被此方法将其已中断状态设置为 on ;或者
- 在等待获取允许的同时被中断。
则抛出 interruptedexception
,并且清除当前线程的已中断状态。任何原本应该分配给此线程的许可将被分配给其他试图获取许可的线程,就好像已通过调用 release()
而使许可可用一样。
如果超出了指定的等待时间,则返回值为 false
。如果该时间小于等于 0,则方法根本不等待。任何原本应该分配给此线程的许可将被分配给其他试图获取许可的线程,就好像已通过调用 release()
而使许可可用一样。
- 参数:
permits
- 要获取的许可数timeout
- 等待许可的最多时间unit
- timeout
参数的时间单位
- 返回:
- 如果获取了许可,则返回
true
;如果获取所有许可前超出了等待时间,则返回 false
- 抛出:
interruptedexception
- 如果当前线程是已中断的
illegalargumentexception
- 如果 permits
为负