【发布时间】:2018-03-13 19:42:27
【问题描述】:
Effective Java - Item 66 (2nd Edition) 状态
实际上,除非读写操作都同步,否则同步是没有效果的。
假设我有一个对象正在被一个线程更新并被另一个线程读取。出于通信目的,需要在读取线程上进行同步,因为如上所述
换句话说,这些方法上的同步仅用于其通信效果,而不是用于互斥。
但是如果写入是由单线程执行的,为什么我们在写入过程中不使用同步就不能逃脱呢?
【问题讨论】:
-
这里提到的通信是在写线程和读线程之间,而不是(必须)在不同的读者之间。在下面的答案中,这种通信称为happens-before。写入必须先发生,否则 JVM 没有义务使写入可见。
标签: java concurrency synchronization synchronized