【发布时间】:2020-02-03 14:38:44
【问题描述】:
我正在阅读Java Concurrency in Practice 的书。
在阅读有关 JMM 的章节时,它说:
JMM 为程序中的所有操作定义了一个称为发生前发生的偏序。为了保证执行动作 B 的线程可以看到动作 A 的结果(无论 A 和 B 是否发生在不同的线程中),A 和 B 之间必须有 happens-before 关系。 p>
但是,我不能使用任何发生前的规则来推导“初始化安全”规则:
初始化安全保证对于正确构造的对象,所有线程都将看到构造函数设置的最终字段的正确值,而不管对象是如何发布的。
我们可以使用happens-before规则来推导出“初始化安全”规则,还是这两个概念只是同一级别的抽象?
【问题讨论】:
-
“我们可以使用happens-before 规则来导出“初始化安全”规则吗?” - 该规则本身引入了所描述的动作之间的happens-before 关系。这就像一个公理:不需要推导它。
标签: java final happens-before