是什么让不可变对象在没有安全发布技术的情况下发布?

时间:2013-06-08 14:42:23

标签: java multithreading concurrency final java-memory-model

即使不诉诸安全出版惯用语,也可以发布不可变对象是什么意思?

我已阅读实践中的Java并发第3章,共享对象),但仍无法理解该声明:

  

可以通过任何机制发布不可变对象。

               V/S 
  

应该安全地发布有效的不可变对象。

编辑:我已经通过similar question on SO和答案,但仍然无法理解如何安全地发布不可变对象,因为引用不可变对象的字段有可能被视为null或某些陈旧外部线程从earler调用中获取的值。

1 个答案:

答案 0 :(得分:2)

并非每个用例都需要在任何精确的时刻看到新的实例。考虑教科书示例:懒惰初始化的单例,在每个线程中重新初始化比安全共享更便宜。在这种情况下,您可能会不安全地共享不可变实例,并且每个无法接收已存在副本的线程将只创建自己的副本。

至于术语:不安全的发布意味着它发生在数据争用之下。 安全发布是相反的情况。

BTW java.lang.String是一个有效不可变对象的示例,但仍可以不安全地共享。