以下内容摘自经典著作《Java并发编程实践》:
当线程A写入一个volatile变量后,随后线程B读取同一变量时,所有在A写入volatile变量之前可见的变量的值都将对B可见。
这个语句可能有些微妙之处,比如在这个上下文中,“所有变量”指什么?这是否意味着使用volatile关键字也会影响非volatile变量的使用?
作者不确定自己是否完全理解了这个陈述。您需要帮助吗?
当线程A写入一个volatile变量后,随后线程B读取同一变量时,所有在A写入volatile变量之前可见的变量的值都将对B可见。
这个语句可能有些微妙之处,比如在这个上下文中,“所有变量”指什么?这是否意味着使用volatile关键字也会影响非volatile变量的使用?
作者不确定自己是否完全理解了这个陈述。您需要帮助吗?
hb(w1, r2)
。目前为止还好。但是为什么在这里规定2
的更新值可见呢?写入可以发生在读取之前,但是读取使用的是缓存值而不是从w1
获取的值,这种情况难道不可能发生吗?这是我无法理解的部分。hb(w1, r2)
的定义是否还包括可见性方面的内容? - Cratylus