java - 关于读写锁的查询

标签 java multithreading java.util.concurrent

我正在研究 java 并发 API 并试图了解读写锁的用处。 javadoc 说 readwrite block 维护一对锁,一个用于读操作,另一个用于写操作。虽然写锁是一个线程独占访问,但多个线程可以获得读锁。因此,如果在读取部分我们所做的只是读取操作,并且无论如何我们都提供多线程访问,那么首先需要读取锁是什么?有读写锁真正有用的场景吗?

最佳答案

.... what is the need to have the readlock in the first place

在读取时,您需要阻止写入者获取锁……直到所有读取器都完成为止。但是另一个读者获取锁是可以的。

在写入时,您需要阻止读取器获取锁……直到写入器完成。

(换句话说,可以有一个作者,或多个持有锁的读者......但不能同时存在。)

为了描述这一点,将行为描述为两把锁是有帮助的。 实际上在幕后发生了什么……是特定于实现的。


Is there a scenario when the readwrite lock is actually useful?

嗯,是的。在您可以区分需要共享只读访问的线程和需要独占读写(或只写)的线程的任何场景中,ReadWrite 锁比简单的 锁允许更多的并发性锁 或原始互斥体。

关于java - 关于读写锁的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182003/

相关文章:

java - 将多个面板添加到 JFrame

java - 套接字服务器最佳方法

java - 在 Velocity 模板中定义数据库查询

java - 如何从 S-RAMP 检索文档?

java - 所有 ExecutorService 任务完成后程序不会立即终止

Java : Array content is automatically updated, 被其他线程更新后,没有任何同步语句?

java - 我可以使用 ForkJoinPool 的工作窃取行为来避免线程饥饿死锁吗?

java - ThreadPoolExecutor 与 ForkJoinPool : stealing subtasks

动态扩展线程数的 Java ExecutorService

java - 检查字符串是否包含\n Java