回答

0

在你的例子中,你应该使用​​,因为volatile不能保证原子性。 如果您使用volatile,则可以初始化该对象的多个实例。

+0

哪个例子? – shmosel

+0

点击“这”在 – Shchipunov

+0

后我做了。这不是OP的代码;它正在记录警告。这是关于安全的出版物,而不是原子性。 – shmosel

1

有没有更好

只有几种不同的模式如何解决这个问题。有关该主题的完整讨论,请参阅here

从这个意义上说:对于新手在做第一步,只需使用​​方法即可。对于“专业”使用 - 请参阅上述链接;并确定哪些解决方案最适合您的需求。

+0

让我们说我有一个字符串声明,并得到初始化,这成为线程不安全。对于这种情况,我可以让字符串字段变成易失性的,以便它初始化的值可以立即用于所有线程。 – aravindkanna

+0

* volatile *表示读/写**总是**访问**内存**。与访问可以驻留在本地缓存中的内容相比,访问内存比**慢一个数量级**!因此:是的,当然,挥发性解决了问题。但它的成本。因此,你小心使用它**。 – GhostCat

+0

对于这个问题的每一个实例,如果我使用双重检查锁定习惯用法,就像您提供的资源中所建议的那样,这样会有效吗?或使整个“同步”块效率更高?问题是如果我有一个很大的方法,所有的指令都可以并行执行,除了初始化语句,使整个方法'synchronized'可能会影响效率。我认为这种损失超过了我们面临的波动。纠正我,如果我错了。 – aravindkanna