4

即使不使用安全的发布习惯,也可以发布不可变对象是什么意思?

我已阅读实践中的 Java 并发第 3 章,共享对象),但仍然无法理解以下语句:

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

               V/S 

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

编辑:我已经通过关于 SO和答案的类似问题,但仍然无法理解如何安全地发布不可变对象,因为引用不可变对象的字段有可能被视为 null 或早期调用中的一些陈旧值通过外螺纹。

4

1 回答 1

2

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

至于术语:不安全的发布意味着它发生在数据竞赛下。安全发布则相反。

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

于 2013-06-08T14:57:28.407 回答