public interface ReadWriteLock
ReadWriteLock
保持一对一联系
locks
,只读操作和书写。的
read lock
可能被多个线程同时举行的读者,只要没有作家。
write lock
是独家的。
所有的ReadWriteLock
实现必须保证writeLock
操作内存同步的影响(如在Lock
指定界面)也认为,相对于相关readLock
。也就是说,一个线程成功地获取读锁将看到所有的更新后,以前发布的写锁。
读写锁允许访问共享数据比用互斥锁允许更多的并发级别。它利用的事实,而只有一个单一的线程在一个时间(一个作家线程)可以修改共享数据,在许多情况下,任何数量的线程可以同时读取数据(因此读者线程)。在理论上,并发的读写锁的使用允许的增加将导致在一个互斥锁的使用性能的改进。在实践中,这种增加的并发性只会完全实现一个多处理器,然后,只有当共享数据的访问模式是合适的。
是否将提高读写锁的互斥锁的使用取决于数据的读取与修改的频率特性,进行读写操作的持续时间,为数据的争夺,线程将尝试读取或写在同一时间数据的数量。例如,一个集合,最初是用数据填充,此后经常修改,而被经常搜索的(如目录之类的)是一个读写锁的使用的一个理想的候选人。然而,如果更新变得频繁,那么数据花费大部分时间被专门锁定,很少有,如果任何增加的并发性。此外,如果读操作过短的读写锁执行的开销(这是本来就比一个互斥锁更复杂)可以支配的执行成本,特别是许多读写锁的实现仍然连载所有的线程通过一小段代码。最终,只有分析和测试将确定一个读写锁的使用适用于您的应用程序。
虽然读写锁的基本操作是直接的,有很多的政策决定的实施必须,这可能影响到一个给定的应用程序的读写锁的有效性。这些政策的例子包括:
ReentrantReadWriteLock
,
Lock
,
ReentrantLock
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.