有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

即使不使用安全的发布习惯用法也可以发布不可变的对象,这意味着什么

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

Immutable objects can be published through any mechanism.

               V/S 

Effectively immutable objects should be safely published.

编辑:我已经阅读了similar question on SO和答案,但仍然无法理解如何安全地发布不可变对象,因为引用不可变对象的字段可能会被外部线程早期调用视为null或某个过时值


共 (1) 个答案

  1. # 1 楼答案

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

    至于术语:不安全发布意味着它发生在数据竞争下安全出版物则相反

    顺便说一句,{}是一个有效不可变的对象的例子,它仍然可以不安全地共享