ReentrantReadWriteLock.ReentrantWriteLock.TryLock 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
TryLock() |
仅在调用时不由另一个线程持有写入锁时才获取写入锁。 |
TryLock(Int64, TimeUnit) |
如果在给定的等待时间内未由另一个线程持有写入锁,并且当前线程尚未中断 Thread#中断,则获取写入锁。 |
TryLock()
仅在调用时不由另一个线程持有写入锁时才获取写入锁。
[Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")]
public virtual bool TryLock();
[<Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")>]
abstract member TryLock : unit -> bool
override this.TryLock : unit -> bool
返回
true
如果锁是释放的,并且是由当前线程获取的,或者写入锁已被当前线程持有:否则 false
。
实现
- 属性
注解
仅在调用时不由另一个线程持有写入锁时才获取写入锁。
如果读取锁和写入锁均未由另一个线程持有,并立即返回值 true
,则获取写入锁,并将写入锁保留计数设置为 1。 即使此锁已设置为使用公平排序策略, tryLock()
<调用 em>将</em> 将立即获取锁(如果它可用),无论其他线程当前是否正在等待写入锁。 此 ”barging”行为在某些情况下可能很有用,即使它打破公平性。 如果要遵守此锁的公平性设置,请使用 #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS)
几乎等效的(它还检测到中断)。
如果当前线程已保存此锁,则保留计数递增一个,该方法返回 true
。
如果锁由另一个线程持有,则此方法将立即返回值 false
。
适用于 . 的 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock()
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
适用于
TryLock(Int64, TimeUnit)
如果在给定的等待时间内未由另一个线程持有写入锁,并且当前线程尚未中断 Thread#中断,则获取写入锁。
[Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryLock(long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
参数
- timeout
- Int64
等待写入锁的时间
- unit
- TimeUnit
超时参数的时间单位
返回
true
如果锁是释放的,并且是由当前线程获取的,或者写入锁已被当前线程持有:如果 false
锁定之前经过的等待时间,则获取锁。
实现
- 属性
例外
如果当前线程中断
如果时间单位为 null,则为
注解
如果在给定的等待时间内未由另一个线程持有写入锁,并且当前线程尚未中断 Thread#中断,则获取写入锁。
如果读取锁和写入锁均未由另一个线程持有,并立即返回值 true
,则获取写入锁,并将写入锁保留计数设置为 1。 如果此锁已设置为使用公平排序策略,则如果任何其他线程正在等待写入锁,则不会/em 获取可用的锁 <em>>。< 这与 #tryLock()
方法形成鲜明对比。 如果想要允许对公平锁进行禁止的计时, tryLock
则将计时和未计时的表单合并在一起:
{@code
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
}}
如果当前线程已保存此锁,则保留计数递增一个,该方法返回 true
。
如果锁由另一个线程持有,则当前线程出于线程计划目的被禁用,并处于休眠状态,直到发生以下三种情况之一:
<ul>
<li>当前线程获取写入锁;或
<li>其他一些线程 Thread#中断中断当前线程;或
<li>指定的等待时间已用
</ul>
如果获取写入锁,则返回该值 true
,并将写入锁保留计数设置为 1。
如果当前线程:
<ul>
<li>在进入此方法时设置了中断状态;或
<li>是线程#中断在获取写入锁时中断的,
</ul>
然后 InterruptedException
会引发,并清除当前线程的中断状态。
如果指定的等待时间已过,则返回该值 false
。 如果时间小于或等于零,则该方法根本不会等待。
在此实现中,由于此方法是显式中断点,因此优先于响应对锁的正常或重新进入获取的中断,并报告等待时间的运行时间。
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。