并发在实践中列出5.15是否已损坏?

时间:2017-12-27 04:13:14

标签: java multithreading concurrency visibility safe-publication

在JCIP中,列出了5.15,Goetz演示了一个使用CyclicBarrier的类,但是让我感到兴趣的是,在使用这个障碍的类的构造函数内部,他通过实例化a来让这个引用逃脱新的CyclicBarrier。

对于其他线程,通过调用它的start方法使用此类中的对象,他们不能看到不良结果,因为他们调用的构造对象开始,可能没有它的字段mainBoard,barrier和worker?

据我所知,如果事情是最终的,那么在构造之后它们可以保证对其他线程可见,但只有在构造正确的情况下才能看到它们。

通过可见,我的意思是安全发布,其他线程看到正确的值和对象以及durimg构建的引用。

在构造函数内部的Worker上调用new时,代码也允许此引用转义。

我读的越多,我对安全发布和可见性的困惑就越多。有人可以澄清一下这是如何运作的吗?

这似乎与Goetz在第3章中告诉我们不要做的事情相矛盾,他在第3章中解释了Holder课程因为列出3.15中可能出现的问题而被打破的原因。

我不明白为什么这个例子(列表5.15)没问题。

0 个答案:

没有答案