Semaphore.TryAcquire 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
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 属性许可证中所述的术语使用。