回答

0

在你的例子中,你應該使用​​,因爲volatile不能保證原子性。 如果您使用volatile,則可以初始化該對象的多個實例。

+0

哪個例子? – shmosel

+0

點擊「這」在 – Shchipunov

+0

後我做了。這不是OP的代碼;它正在記錄警告。這是關於安全的出版物,而不是原子性。 – shmosel

1

有沒有更好

只有幾種不同的模式如何解決這個問題。有關該主題的完整討論,請參閱here

從這個意義上說:對於新手在做第一步,只需使用​​方法即可。對於「專業」使用 - 請參閱上述鏈接;並確定哪些解決方案最適合您的需求。

+0

讓我們說我有一個字符串聲明,並得到初始化,這成爲線程不安全。對於這種情況,我可以讓字符串字段變成易失性的,以便它初始化的值可以立即用於所有線程。 – aravindkanna

+0

* volatile *表示讀/寫**總是**訪問**內存**。與訪問可以駐留在本地緩存中的內容相比,訪問內存比**慢一個數量級**!因此:是的,當然,揮發性解決了問題。但它的成本。因此,你小心使用它**。 – GhostCat

+0

對於這個問題的每一個實例,如果我使用雙重檢查鎖定習慣用法,就像您提供的資源中所建議的那樣,這樣會有效嗎?或使整個「同步」塊效率更高?問題是如果我有一個很大的方法,所有的指令都可以並行執行,除了初始化語句,使整個方法'synchronized'可能會影響效率。我認爲這種損失超過了我們面臨的波動。糾正我,如果我錯了。 – aravindkanna