【发布时间】:2013-06-08 14:42:23
【问题描述】:
即使不使用安全的发布习惯也可以发布不可变对象是什么意思?
我已阅读 Java 并发实践(第 3 章,共享对象),但仍然无法理解语句:
不可变对象可以通过任何机制发布。
V/S
应该安全地发布有效的不可变对象。
编辑:我已经通过similar question on SO 和答案,但仍然无法理解如何安全地发布不可变对象,因为引用不可变对象的字段有可能被视为 null 或一些陈旧的值由外部线程进行的较早调用。
【问题讨论】:
-
不可变对象本身可以安全发布,任何引用它的字段都不是不可变对象的一部分,因此没有相同的保证。
-
它们不能改变,因此您可以将它们视为“常量”。对于任何常量,您都希望能够在没有并发问题的情况下发布。
-
@Trillian 但是在像 Java 这样的语言中,如果对安全发布对象的引用仍然过时,那么它的用途是什么?他们应该同步说该对象已安全发布,对吧?
-
问题?线程安全,不多也不少。不可变对象本质上是线程安全的。这个概念非常重要,以至于 JSR 305 有一个
@Immutable注释来装饰类。
标签: java multithreading concurrency final java-memory-model