无法理解方法1和3如何帮助实现安全发布。如果可能的话,任何人都可以通过一个例子来帮助我理解这一点。
安全地发布对象,两者都是 引用对象和 必须使对象的状态可见 其他线程同时。一个 正确构造的对象可以 安全发布者:
从静态初始化程序初始化对象引用
将对它的引用存储到易失性字段或AtomicReference
将对它的引用存储到正确构造的最终字段中 对象
将对它的引用存储到由正确保护的字段中 锁。
答案 0 :(得分:4)
Java内存模型中有特定的同步规则,用于定义Java程序中的“先发生”关系,这些关系确定应用程序何时可以保证看到它引用的变量的“新鲜”值。 “安全发布”方法实现安全发布,作为同步规则的逻辑结果,以及Java语言规范中规定的其他规则。
JLS section 12.4.2指定初始化类的过程。此过程中发生的同步可能足以保证安全发布。
JLS section 17.4.项目符号第2点涉及volatile字段。 AtomicReferences的这个属性是javadocs中指定的行为的结果。
JLS section 17.4.项目符号1
要真正理解这些内容,您需要多次仔细阅读所有JLS第17节。