ReentrantReadWriteLock.ReentrantWriteLock.TryLock 方法

定义

重载

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 。 如果时间小于或等于零,则该方法根本不会等待。

在此实现中,由于此方法是显式中断点,因此优先于响应对锁的正常或重新进入获取的中断,并报告等待时间的运行时间。

适用于 . 的 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock(long, java.util.concurrent.TimeUnit)Java 文档

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

适用于