IReadWriteLock 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
维护 ReadWriteLock
一对关联的 Lock locks
,一个用于只读操作,一个用于写入。
[Android.Runtime.Register("java/util/concurrent/locks/ReadWriteLock", "", "Java.Util.Concurrent.Locks.IReadWriteLockInvoker")]
public interface IReadWriteLock : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/concurrent/locks/ReadWriteLock", "", "Java.Util.Concurrent.Locks.IReadWriteLockInvoker")>]
type IReadWriteLock = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 派生
- 属性
- 实现
注解
维护 ReadWriteLock
一对关联的 Lock locks
,一个用于只读操作,一个用于写入。 只要没有写入器,多个读取器线程可以同时持有 #readLock 读取锁。 #writeLock 写锁是独占的。
所有ReadWriteLock
实现都必须保证接口中指定的Lock
操作的writeLock
内存同步效果 () 对关联的 readLock
保持。 也就是说,成功获取读取锁的线程将看到以前版本的写入锁时所做的所有更新。
读写锁允许访问共享数据的并发级别高于互斥锁允许的并发级别。 它利用了这样一个事实:虽然一次只有一个线程 (<em>writer</em> 线程) 可以修改共享数据,但在许多情况下,任意数量的线程都可以同时读取数据 (因此 <em>reader</em> 线程) 。 从理论上讲,使用读写锁允许的并发性增加将导致性能比使用互斥锁改进。 实际上,仅当共享数据的访问模式合适时,才能在多处理器上完全实现并发性的增长。
读写锁是否比使用互斥锁提高性能取决于读取数据的频率(与被修改相比),读取和写入操作的持续时间,以及数据的争用-即尝试同时读取或写入数据的线程数。 例如,最初填充数据但随后不经常修改的集合,而经常搜索 ((例如某种) 目录)是使用读写锁的理想候选项。 但是,如果更新频繁,则数据将花费大部分时间被独占锁定,如果并发性有任何增加,则很少。 此外,如果读取操作太短,读写锁实现的开销 (这在本质上比互斥锁更复杂,) 可能会主导执行成本,特别是因为许多读写锁实现仍然通过一小部分代码序列化所有线程。 最终,只有分析和度量才能确定读写锁的使用是否适合应用程序。
尽管读写锁的基本操作是直接的,但实现必须做出许多策略决策,这可能会影响读写锁在给定应用程序中的有效性。 这些策略的示例包括: <ul><li>确定在读取器和编写器都在等待写入器释放写入锁时授予读取锁还是写入锁。 编写器首选项很常见,因为写入预期较短且不频繁。 读取器首选项不太常见,因为如果读取器按预期频繁且生存期长,则可能导致写入长时间延迟。 公平或 &报价;按顺序"也可以实现。
<li>确定在读取器处于活动状态且编写器正在等待时请求读取锁的读取器是否被授予读取锁。 首选读取器可能会无限期地延迟编写器,而优先使用编写器可能会降低并发的可能性。
<li>确定锁是否可重入:具有写入锁的线程是否可以重新获取它? 它是否可以在持有写入锁时获取读取锁? 读取锁本身是否可重入?
<li>是否可以在不允许干预编写器的情况下将写入锁降级到读取锁? 读取锁是否可以升级到写入锁,而不是其他等待的读取器或编写器?
</ul> 评估给定实现是否适合应用程序时,应考虑所有这些事项。
在 1.5 中添加。
的 java.util.concurrent.locks.ReadWriteLock
Java 文档。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
属性
Handle |
获取基础 Android 对象的 JNI 值。 (继承自 IJavaObject) |
JniIdentityHashCode |
返回包装实例的 的值 |
JniManagedPeerState |
托管对等方的状态。 (继承自 IJavaPeerable) |
JniPeerMembers |
成员访问和调用支持。 (继承自 IJavaPeerable) |
PeerReference |
返回 JniObjectReference 包装的 Java 对象实例的 。 (继承自 IJavaPeerable) |
方法
Disposed() |
释放实例时调用。 (继承自 IJavaPeerable) |
DisposeUnlessReferenced() |
如果没有对此实例的未完成引用,则调用 |
Finalized() |
在实例完成时调用。 (继承自 IJavaPeerable) |
ReadLock() |
返回用于读取的锁。 |
SetJniIdentityHashCode(Int32) |
设置 返回 |
SetJniManagedPeerState(JniManagedPeerStates) |
维护 |
SetPeerReference(JniObjectReference) |
设置 返回 |
UnregisterFromRuntime() |
取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。 (继承自 IJavaPeerable) |
WriteLock() |
返回用于写入的锁。 |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
维护 |
GetJniTypeName(IJavaPeerable) |
维护 |