即使不诉诸安全发布习惯用法,也可以发布不可变对象,这是什么意思?
我读过了Java 并发实践 (第3章,共享对象)但仍然无法理解该声明:
不可变对象可以通过任何机制发布。
V/S
应该安全地发布有效的不可变对象。
编辑:我经历过SO类似的问题 https://stackoverflow.com/questions/7886577/safe-publication-and-the-advantage-of-being-immutable-vs-effectively-immutable和答案,但仍然无法理解如何安全地发布不可变对象,因为引用不可变对象的字段有可能被视为 null 或外部线程早期调用的一些陈旧值。
并非每个用例都需要在任何精确时刻看到新实例。考虑教科书上的例子:延迟初始化的单例在每个线程中重新初始化比安全共享更便宜。在这种情况下,您可能会不安全地共享一个不可变的实例,并且每个无法接收已存在副本的线程只会创建自己的副本。
至于术语:不安全的出版意味着它发生在数据竞争下。安全出版则相反。
BTW java.lang.String
是一个例子有效地不可变但仍可以不安全地共享的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)