为什么我们需要一个Java锁才能读取?

Vic*_*tor 2 locking java-5

Wrt ReadWriteLock,为什么我在尝试阅读某些东西时需要锁?仅在我正在更改变量时才使用我的知识,而不是读它以避免并发线程试图更改该变量。那么为什么我们只需要一个锁就可以阅读呢?

SLa*_*aks 5

ReaderWriterLock的目的是确保在读取内容时,没有其他线程对某些内容进行更改。

锁的读取部分不是唯一的(可以有多个并发读取器),但写入部分除外(读取器将等待写入器,反之亦然)。

  • 更多细节:即使你的代码只读取一个整数而不是一个复杂的结构,你也需要锁或原子。没有它们,您的线程不能保证看到更新的值,因为其他 CPU 没有义务从缓存中刷新它。x86 缓存规则不会发生这种情况,但您永远不知道代码将在哪里运行,对吧。 (2认同)