LockSupport 类

定义

用于创建锁和其他同步类的基本线程阻塞基元。

[Android.Runtime.Register("java/util/concurrent/locks/LockSupport", DoNotGenerateAcw=true)]
public class LockSupport : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/locks/LockSupport", DoNotGenerateAcw=true)>]
type LockSupport = class
    inherit Object
继承
LockSupport
属性

注解

用于创建锁和其他同步类的基本线程阻塞基元。

此类将使用该类的每个线程(从类意义上 java.util.concurrent.Semaphore Semaphore 讲)关联。 如果许可证可用,则调用 park 将立即返回,并在进程中使用它;否则它将 <em>可能</em> 块。 调用使 unpark 许可证可用(如果尚不可用)。 (不过,与信号灯不同,许可证不会累积。最多有一个。可靠的使用需要使用可变变量(或原子变量)来控制何时停泊或取消停泊。 对这些方法的调用顺序与可变变量访问保持,但不一定是非可变变量访问。

park方法并提供unpark有效的阻止和取消阻止线程的方法,这些线程未遇到导致已弃用的方法Thread.suspendThread.resume无法用于此类目的的问题:由于允许,一个线程调用park另一个线程unpark之间的争用将保留生存度。 此外, park 如果调用方线程中断,并且支持超时版本,则返回。 此方法 park 可能还会在任何其他时间返回,因为“无原因”,因此通常必须在返回时重新检查条件的循环中调用。 从这个意义上说 park ,它作为“忙碌等待”的优化,不会浪费尽可能多的时间旋转,但必须与 unpark 有效配对。

这三种形式 park 还支持对象 blocker 参数。 在线程被阻止时记录此对象,以允许监视和诊断工具确定阻止线程的原因。 (此类工具可以使用方法 #getBlocker(Thread)访问阻止程序。强烈建议使用这些窗体,而不是不使用此参数的原始窗体。 作为 blocker 锁实现中提供的正常参数是 this

这些方法旨在用作用于创建更高级别的同步实用工具的工具,并且本身不适用于大多数并发控制应用程序。 该方法 park 仅用于窗体的构造:

{@code
            while (!canProceed()) {
              // ensure request to unpark is visible to other threads
              ...
              LockSupport.park(this);
            }}

其中,线程在调用 park之前不执行任何操作来取消锁定请求,这需要锁定或阻止。 由于只有一个许可证与每个线程相关联,因此任何中间用途 park(包括通过类加载隐式使用)都可能导致无响应线程(“丢失的未park”)。

<b>示例用法。</b> 下面是先入先出非重新进入锁类的草图:

{@code
            class FIFOMutex {
              private final AtomicBoolean locked = new AtomicBoolean(false);
              private final Queue<Thread> waiters
                = new ConcurrentLinkedQueue<>();

              public void lock() {
                boolean wasInterrupted = false;
                // publish current thread for unparkers
                waiters.add(Thread.currentThread());

                // Block while not first in queue or cannot acquire lock
                while (waiters.peek() != Thread.currentThread() ||
                       !locked.compareAndSet(false, true)) {
                  LockSupport.park(this);
                  // ignore interrupts while waiting
                  if (Thread.interrupted())
                    wasInterrupted = true;
                }

                waiters.remove();
                // ensure correct interrupt status on return
                if (wasInterrupted)
                  Thread.currentThread().interrupt();
              }

              public void unlock() {
                locked.set(false);
                LockSupport.unpark(waiters.peek());
              }

              static {
                // Reduce the risk of "lost unpark" due to classloading
                Class<?> ensureLoaded = LockSupport.class;
              }
            }}

在 1.5 中添加。

适用于 . 的 java.util.concurrent.locks.LockSupportJava 文档

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

构造函数

LockSupport(IntPtr, JniHandleOwnership)

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

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
JniIdentityHashCode

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
JniPeerMembers

用于创建锁和其他同步类的基本线程阻塞基元。

PeerReference

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
ThresholdClass

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

ThresholdType

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

方法

Clone()

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

(继承自 Object)
Dispose()

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
Dispose(Boolean)

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
Equals(Object)

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

(继承自 Object)
GetBlocker(Thread)

返回提供给尚未取消阻止的公园方法的最新调用的阻止程序对象;如果未阻止,则返回 null。

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
JavaFinalize()

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

(继承自 Object)
Notify()

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

(继承自 Object)
NotifyAll()

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

(继承自 Object)
Park()

出于线程计划目的禁用当前线程,除非许可证可用。

Park(Object)

出于线程计划目的禁用当前线程,除非许可证可用。

ParkNanos(Int64)

为线程计划目的禁用当前线程,直到指定的等待时间,除非许可证可用。

ParkNanos(Object, Int64)

为线程计划目的禁用当前线程,直到指定的等待时间,除非许可证可用。

ParkUntil(Int64)

为线程计划目的禁用当前线程,直到指定的截止时间,除非许可证可用。

ParkUntil(Object, Int64)

为线程计划目的禁用当前线程,直到指定的截止时间,除非许可证可用。

SetCurrentBlocker(Object)

设置要通过 #getBlocker getBlocker 调用当前线程返回的对象。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

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

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
ToString()

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

(继承自 Object)
Unpark(Thread)

为给定线程提供许可证(如果尚不可用)。

UnregisterFromRuntime()

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
Wait()

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

(继承自 Object)
Wait(Int64)

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

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

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

(继承自 Object)

显式接口实现

IJavaPeerable.Disposed()

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
IJavaPeerable.Finalized()

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

用于创建锁和其他同步类的基本线程阻塞基元。

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

用于创建锁和其他同步类的基本线程阻塞基元。

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

用于创建锁和其他同步类的基本线程阻塞基元。

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

用于创建锁和其他同步类的基本线程阻塞基元。

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

用于创建锁和其他同步类的基本线程阻塞基元。

GetJniTypeName(IJavaPeerable)

用于创建锁和其他同步类的基本线程阻塞基元。

适用于