在JCIP中,列出了5.15,Goetz演示了一个使用CyclicBarrier的类,但是让我感到兴趣的是,在使用这个障碍的类的构造函数内部,他通过实例化a来让这个引用逃脱新的CyclicBarrier。
对于其他线程,通过调用它的start方法使用此类中的对象,他们不能看到不良结果,因为他们调用的构造对象开始,可能没有它的字段mainBoard,barrier和worker?
据我所知,如果事情是最终的,那么在构造之后它们可以保证对其他线程可见,但只有在构造正确的情况下才能看到它们。
通过可见,我的意思是安全发布,其他线程看到正确的值和对象以及durimg构建的引用。
在构造函数内部的Worker上调用new时,代码也允许此引用转义。
我读的越多,我对安全发布和可见性的困惑就越多。有人可以澄清一下这是如何运作的吗?
这似乎与Goetz在第3章中告诉我们不要做的事情相矛盾,他在第3章中解释了Holder课程因为列出3.15中可能出现的问题而被打破的原因。
我不明白为什么这个例子(列表5.15)没问题。