语言

ReentrantLock 类

定义

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

[Android.Runtime.Register("java/util/concurrent/locks/ReentrantLock", DoNotGenerateAcw=true)]
public class ReentrantLock : Java.Lang.Object, IDisposable, Java.IO.ISerializable, Java.Util.Concurrent.Locks.ILock
[<Android.Runtime.Register("java/util/concurrent/locks/ReentrantLock", DoNotGenerateAcw=true)>]
type ReentrantLock = class
    inherit Object
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface ILock
继承
ReentrantLock
属性
实现

注解

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

线程ReentrantLock最后一次成功锁定但尚未解除锁定的 em<> 拥有/em<。> 当锁不由另一个线程拥有时,调用 lock 线程将返回成功获取锁。 如果当前线程已拥有锁,该方法将立即返回。 这可以使用方法 #isHeldByCurrentThread进行检查,也可以使用 #getHoldCount方法进行检查。

此类的构造函数接受可选的 <em>fairness</em> 参数。 true设置时,在争用下,锁有利于授予对最长等待线程的访问权限。 否则,此锁不能保证任何特定的访问顺序。 使用由许多线程访问的公平锁的程序可能会显示较低的整体吞吐量(即速度较慢;通常比使用默认设置慢得多),但获取锁并保证缺少饥饿的时间差异较小。 但是,请注意,锁的公平性不能保证线程计划的公平性。 因此,使用公平锁的多个线程之一可能会连续多次获取它,而其他活动线程没有进行并且当前未持有锁。 另请注意,非时间 #tryLock() 方法不遵循公平性设置。 如果锁可用,即使其他线程正在等待,也会成功。

建议在<调用块后立即 >< em>alwayslock/emtry,这通常是在构造前/之后的构造中:

{@code
            class X {
              private final ReentrantLock lock = new ReentrantLock();
              // ...

              public void m() {
                lock.lock();  // block until condition holds
                try {
                  // ... method body
                } finally {
                  lock.unlock();
                }
              }
            }}

除了实现 Lock 接口之外,此类还定义了许多 public 用于检查锁状态的方法和 protected 方法。 其中一些方法仅适用于检测和监视。

此类的序列化与内置锁的行为方式相同:反序列化锁处于解锁状态,而不考虑序列化时的状态。

此锁支持同一线程最多2147483647递归锁。 尝试超过此限制会导致 Error 锁定方法引发。

在 1.5 中添加。

Java文档java.util.concurrent.locks.ReentrantLock。

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

构造函数

名称 说明
ReentrantLock()

创建 ReentrantLock 的实例。

ReentrantLock(Boolean)

创建具有给定公平性策略的 ReentrantLock 实例。

ReentrantLock(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

属性

名称 说明
Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
HasQueuedThreads

查询任何线程是否正在等待获取此锁。

HoldCount

查询当前线程对此锁的保留数。

IsFair

如果此锁的公平性设置为 true,则返回 true 。

IsHeldByCurrentThread

查询当前线程是否持有此锁。

IsLocked

查询此锁是否由任何线程持有。

JniIdentityHashCode

获取互操作运行时分配给此Java对等的标识哈希代码。

(继承自 Object)
JniManagedPeerState

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
JniPeerMembers

获取用于调用此Java对等方成员的 JNI 元数据。

Owner

返回当前拥有此锁或 null 未拥有的线程。

PeerReference

获取此Java对等方的 JNI 对象引用。

(继承自 Object)
QueuedThreads

返回一个集合,其中包含可能正在等待获取此锁的线程。

QueueLength

返回等待获取此锁的线程数的估计值。

ThresholdClass

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

ThresholdType

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

方法

名称 说明
Clone()

创建并返回此对象的副本。

(继承自 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
Dispose()

释放此Java对等方持有的资源。

(继承自 Object)
Dispose(Boolean)

释放此Java对等方持有的资源。

(继承自 Object)
DisposeUnlessReferenced()

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
Equals(Object)

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
Equals(Object)

指示其他对象是否“等于”此对象。

(继承自 Object)
GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
GetWaitingThreads(ICondition)

返回一个集合,该集合包含可能正在等待与此锁关联的给定条件的线程。

GetWaitQueueLength(ICondition)

返回与此锁关联的给定条件等待的线程数的估计值。

HasQueuedThread(Thread)

查询给定线程是否正在等待获取此锁。

HasWaiters(ICondition)

查询任何线程是否正在等待与此锁关联的给定条件。

JavaFinalize()
已过时.

当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。

(继承自 Object)
Lock()

获取锁。

LockInterruptibly()

除非当前线程中断线程中断,否则获取锁。

NewCondition()

返回用于 Condition 此 Lock 实例的实例。

Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
ToArray<T>()

从此Java数组包装器创建托管数组。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
TryLock()

仅在调用时不由另一个线程持有该锁时才获取该锁。

TryLock(Int64, TimeUnit)

如果在给定的等待时间内未由另一个线程持有该锁,并且当前线程尚未中断 Thread#中断,则获取该锁。

Unlock()

尝试释放此锁。

UnregisterFromRuntime()

从互操作运行时取消注册此Java对等。

(继承自 Object)
Wait()

使当前线程等待,直到唤醒它,通常是通过 em 通知/em< 或 >em<interrupted>/em<。><>

(继承自 Object)
Wait(Int64, Int32)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。

(继承自 Object)
Wait(Int64)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。

(继承自 Object)

显式接口实现

名称 说明
IJavaPeerable.Disposed()

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
IJavaPeerable.Finalized()

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

(继承自 JavaObject)
IJavaPeerable.UnregisterFromRuntime()

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

与使用Lock方法和语句访问的隐式监视器锁具有相同的基本行为和语义的重新进入互斥synchronized,但具有扩展功能。

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于