簡體   English   中英

為什么即使在波動的修復之后,雙重檢查鎖仍然不鼓勵?

[英]why is double checked locking still discouraged even after the volatile fix?

關於JMM的參考文章

值得注意的是,在新的內存模型下,雙重檢查鎖定這樣的破碎技術仍然存在,而“修復”雙重檢查鎖定並不是新內存模型工作的目標之一。 (但是,volatile的新語義允許使用雙重檢查鎖定的常用方法之一才能正常工作, 盡管仍然不鼓勵這種技術。

相關討論:

我能理解為什么沒有volatile修復就會破壞它。 但我不知道為什么即使在修復之后它仍然氣餒。 我注意到其中一個討論中存在一些分歧。 但如果它真的像參考建議的那樣? 這個固定版本仍然不鼓勵的原因是什么?

所以首先:使用新的Java MM,雙重檢查的鎖定習慣不再被打破。 所以你可以安全地在Java中使用它。

在某些情況下,無法使用所有其他替代方案(如枚舉或靜態初始化)。 例如,如果您需要訪問非靜態引用以構造單例。

因此,只要您完全理解成語,它就是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM