我正在研究这个,以了解新JMM中的最终字段的行为(5以后).这个概念很清楚:在正确构造对象之后,保证初始化的最终字段对所有线程的可见性.
但是在本节的最后,我读到了这个,这让我感到困惑:
现在,说完所有这些,如果在一个线程构造一个不可变对象(即一个只包含最终字段的对象)之后,你想确保所有其他线程都能正确看到它,你通常还需要使用同步.例如,没有其他方法可以确保第二个线程可以看到对不可变对象的引用.
这是否意味着虽然单个最终字段(组成不可变对象)没有同步(例如,此处可见性)问题.但是,首次在线程中创建的不可变对象本身在其他线程中可能不可见(正确创建)?
如果是这样,虽然我们可以跨线程共享初始化的不可变对象而没有任何线程不安全的担忧,但在创建时,他们需要"特别关注"线程安全,就像其他mutable一样?