Exchanger 类

定义

一个同步点,线程可以在配对中配对和交换元素。

[Android.Runtime.Register("java/util/concurrent/Exchanger", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "V" })]
public class Exchanger : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/Exchanger", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "V" })>]
type Exchanger = class
    inherit Object
继承
属性

注解

一个同步点,线程可以在配对中配对和交换元素。 每个线程在方法的条目 #exchange exchange 上呈现一些对象,与伙伴线程匹配,并在返回时接收其合作伙伴的对象。 交换器可以被视为双向形式 SynchronousQueue。 交换器在基因算法和管道设计等应用程序中可能很有用。

<b>示例用法:</b> 下面是一个类的亮点,该类使用在 Exchanger 线程之间交换缓冲区,以便填充缓冲区的线程在需要缓冲区时得到一个全新清空的缓冲区,将填充的缓冲区移交给清空缓冲区的线程。

{@code
            class FillAndEmpty {
              Exchanger<DataBuffer> exchanger = new Exchanger<>();
              DataBuffer initialEmptyBuffer = ...; // a made-up type
              DataBuffer initialFullBuffer = ...;

              class FillingLoop implements Runnable {
                public void run() {
                  DataBuffer currentBuffer = initialEmptyBuffer;
                  try {
                    while (currentBuffer != null) {
                      addToBuffer(currentBuffer);
                      if (currentBuffer.isFull())
                        currentBuffer = exchanger.exchange(currentBuffer);
                    }
                  } catch (InterruptedException ex) { ... handle ...}
                }
              }

              class EmptyingLoop implements Runnable {
                public void run() {
                  DataBuffer currentBuffer = initialFullBuffer;
                  try {
                    while (currentBuffer != null) {
                      takeFromBuffer(currentBuffer);
                      if (currentBuffer.isEmpty())
                        currentBuffer = exchanger.exchange(currentBuffer);
                    }
                  } catch (InterruptedException ex) { ... handle ...}
                }
              }

              void start() {
                new Thread(new FillingLoop()).start();
                new Thread(new EmptyingLoop()).start();
              }
            }}

内存一致性影响:对于通过一Exchanger对成功交换对象的线程,在每个线程exchange()之前(发生在之前<>/i<)中的操作>,这些线程随后从另一个线程中的相应exchange()线程返回。

在 1.5 中添加。

Java文档java.util.concurrent.Exchanger

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

构造函数

名称 说明
Exchanger()

创建新的交换器。

Exchanger(IntPtr, JniHandleOwnership)

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

属性

名称 说明
Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
JniIdentityHashCode

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

(继承自 Object)
JniManagedPeerState

一个同步点,线程可以在配对中配对和交换元素。

(继承自 JavaObject)
JniPeerMembers

一个同步点,线程可以在配对中配对和交换元素。

PeerReference

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

(继承自 Object)
ThresholdClass

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

ThresholdType

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

方法

名称 说明
Clone()

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

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

一个同步点,线程可以在配对中配对和交换元素。

(继承自 JavaObject)
Dispose()

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

(继承自 Object)
Dispose(Boolean)

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

(继承自 Object)
DisposeUnlessReferenced()

一个同步点,线程可以在配对中配对和交换元素。

(继承自 JavaObject)
Equals(Object)

一个同步点,线程可以在配对中配对和交换元素。

(继承自 JavaObject)
Equals(Object)

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

(继承自 Object)
Exchange(Object, Int64, TimeUnit)

等待另一个线程到达此交换点(除非当前线程是 Thread#中断中断或指定的等待时间已过),然后将给定对象传输到该交换点,接收其对象以返回。

Exchange(Object)

等待另一个线程到达此交换点(除非当前线程是 Thread#中断中断),然后将给定对象传输到该交换点,接收其对象以返回。

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
JavaFinalize()

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

(继承自 Object)
Notify()

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

(继承自 Object)
NotifyAll()

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

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

设置 Handle 属性。

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

一个同步点,线程可以在配对中配对和交换元素。

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

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

(继承自 Object)
ToString()

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

(继承自 Object)
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()

一个同步点,线程可以在配对中配对和交换元素。

(继承自 JavaObject)
IJavaPeerable.Finalized()

一个同步点,线程可以在配对中配对和交换元素。

(继承自 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

一个同步点,线程可以在配对中配对和交换元素。

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

一个同步点,线程可以在配对中配对和交换元素。

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

一个同步点,线程可以在配对中配对和交换元素。

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

一个同步点,线程可以在配对中配对和交换元素。

(继承自 JavaObject)

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

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

JavaAs<TResult>(IJavaPeerable)

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

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

一个同步点,线程可以在配对中配对和交换元素。

TryJavaCast<TResult>(IJavaPeerable, TResult)

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

适用于