Semaphore.TryAcquire 方法

定义

重载

TryAcquire()

仅当调用时有一个许可证可用时,才从此信号灯获取许可证。

TryAcquire(Int32)

仅当所有许可证在调用时可用时,才从此信号灯获取给定数量的许可证。

TryAcquire(Int64, TimeUnit)

从此信号灯获取许可证(如果在给定的等待时间内可用,并且当前线程尚未中断 Thread#中断)。

TryAcquire(Int32, Int64, TimeUnit)

从此信号灯获取给定数量的许可证,如果给定的等待时间内所有许可证可用,并且当前线程尚未中断 Thread#中断。

TryAcquire()

仅当调用时有一个许可证可用时,才从此信号灯获取许可证。

[Android.Runtime.Register("tryAcquire", "()Z", "GetTryAcquireHandler")]
public virtual bool TryAcquire ();
[<Android.Runtime.Register("tryAcquire", "()Z", "GetTryAcquireHandler")>]
abstract member TryAcquire : unit -> bool
override this.TryAcquire : unit -> bool

返回

true 如果获得许可证, false 则为

属性

注解

仅当调用时有一个许可证可用时,才从此信号灯获取许可证。

获取许可证(如果一个可用)并立即返回,该值 true将可用许可证数减少一个。

如果没有可用的许可证,此方法将立即返回值 false

即使此信号灯已设置为使用公平排序策略,对 em>的调用<tryAcquire()也将</em> 如果可用,则立即获取许可证(无论其他线程当前是否正在等待)。 此 ”barging”行为在某些情况下可能很有用,即使它打破公平性。 如果要遵循公平性设置,请使用 #tryAcquire(long, TimeUnit) tryAcquire(0, TimeUnit.SECONDS) 几乎等效的设置(它还检测到中断)。

适用于 . 的 java.util.concurrent.Semaphore.tryAcquire()Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于

TryAcquire(Int32)

仅当所有许可证在调用时可用时,才从此信号灯获取给定数量的许可证。

[Android.Runtime.Register("tryAcquire", "(I)Z", "GetTryAcquire_IHandler")]
public virtual bool TryAcquire (int permits);
[<Android.Runtime.Register("tryAcquire", "(I)Z", "GetTryAcquire_IHandler")>]
abstract member TryAcquire : int -> bool
override this.TryAcquire : int -> bool

参数

permits
Int32

获取许可证数

返回

true 如果获得许可证, false 则为

属性

例外

如果 permits 为负数

注解

仅当所有许可证在调用时可用时,才从此信号灯获取给定数量的许可证。

获取给定数量的许可证(如果可用),并立即返回该值 true,并按给定金额减少可用许可证的数量。

如果许可证不足,此方法将立即返回值 false ,可用许可证数保持不变。

即使此信号灯已设置为使用公平排序策略,对 em>的调用<tryAcquire也将</em> 如果可用,则立即获取许可证(无论其他线程当前是否正在等待)。 此 ”barging”行为在某些情况下可能很有用,即使它打破公平性。 如果要遵循公平性设置,请使用 #tryAcquire(int, long, TimeUnit) tryAcquire(permits, 0, TimeUnit.SECONDS) 几乎等效的设置(它还检测到中断)。

适用于 . 的 java.util.concurrent.Semaphore.tryAcquire(int)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于

TryAcquire(Int64, TimeUnit)

从此信号灯获取许可证(如果在给定的等待时间内可用,并且当前线程尚未中断 Thread#中断)。

[Android.Runtime.Register("tryAcquire", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryAcquire_JLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryAcquire (long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryAcquire", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryAcquire_JLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryAcquire : int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryAcquire : int64 * Java.Util.Concurrent.TimeUnit -> bool

参数

timeout
Int64

等待许可证的最长时间

unit
TimeUnit

参数的时间单位timeout

返回

true 如果获取了许可证,并且 false 许可证获得前的等待时间已过,则为

属性

例外

如果当前线程中断

注解

从此信号灯获取许可证(如果在给定的等待时间内可用,并且当前线程尚未中断 Thread#中断)。

获取许可证(如果一个可用)并立即返回,该值 true将可用许可证数减少一个。

如果没有可用许可证,则当前线程出于线程计划目的被禁用,并处于休眠状态,直到发生以下三件事之一:<ul<>li>其他线程调用#release此信号灯的方法,当前线程接下来将分配一个许可证;或者 <li>一些其他线程 Thread#中断中断当前线程;或 <li>指定的等待时间已过。 </ul>

如果获取许可证,则返回该值 true

如果当前线程:<ul<>li 在进入此方法时设置了中断状态;或者 <li>>是在等待获取许可证时中断的 Thread#中断,<则会InterruptedException引发 /ul>,并清除当前线程的中断状态。

如果指定的等待时间已过,则返回该值 false 。 如果时间小于或等于零,则该方法根本不会等待。

适用于 . 的 java.util.concurrent.Semaphore.tryAcquire(long, java.util.concurrent.TimeUnit)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于

TryAcquire(Int32, Int64, TimeUnit)

从此信号灯获取给定数量的许可证,如果给定的等待时间内所有许可证可用,并且当前线程尚未中断 Thread#中断。

[Android.Runtime.Register("tryAcquire", "(IJLjava/util/concurrent/TimeUnit;)Z", "GetTryAcquire_IJLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryAcquire (int permits, long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryAcquire", "(IJLjava/util/concurrent/TimeUnit;)Z", "GetTryAcquire_IJLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryAcquire : int * int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryAcquire : int * int64 * Java.Util.Concurrent.TimeUnit -> bool

参数

permits
Int32

获取许可证数

timeout
Int64

等待许可证的最长时间

unit
TimeUnit

参数的时间单位timeout

返回

true 如果获取了所有许可证,以及 false 所有许可证之前经过的等待时间,则为

属性

例外

如果当前线程中断

如果 permits 为负数

注解

从此信号灯获取给定数量的许可证,如果给定的等待时间内所有许可证可用,并且当前线程尚未中断 Thread#中断。

获取给定数量的许可证(如果可用),并立即返回该值 true,并按给定金额减少可用许可证数。

如果许可证不足,则当前线程出于线程计划目的被禁用,并处于休眠状态,直到发生以下三件事之一:ul>li 其他线程调用此信号灯的方法之一#release() release,当前线程即将分配许可证,可用许可证数满足此请求;或者 li>其他线程 Thread#中断中断当前线程;或 <<li>><<指定的等待时间已过。 </ul>

如果获取许可证,则返回该值 true

如果当前线程:<ul><li 在进入此方法时设置了中断状态;或者 <li>>是 Thread#interrupt 中断,等待获取许可证时中断,<则会InterruptedException引发 /ul>,并清除当前线程的中断状态。 要分配给此线程的任何许可证,而是分配给尝试获取许可证的其他线程,就好像已通过调用 #release()获得许可证一样。

如果指定的等待时间已过,则返回该值 false 。 如果时间小于或等于零,则该方法根本不会等待。 要分配给此线程的任何许可证,而是分配给尝试获取许可证的其他线程,就好像已通过调用 #release()获得许可证一样。

适用于 . 的 java.util.concurrent.Semaphore.tryAcquire(int, long, java.util.concurrent.TimeUnit)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于