亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么易失性在雙重檢查鎖定中使用?

為什么易失性在雙重檢查鎖定中使用?

冉冉說 2019-06-21 15:44:40
為什么易失性在雙重檢查鎖定中使用?從…頭第一設計模式書中,具有雙重檢查鎖定的單例模式已經實現如下:public class Singleton {     private volatile static Singleton instance;     private Singleton() {}     public static Singleton getInstance() {         if (instance == null) {             synchronized (Singleton.class) {                 if (instance == null) {                     instance = new Singleton();                 }             }         }         return instance;     }}我不明白為什么volatile正在被利用。不volatile使用失敗了使用雙重檢查鎖定的目的,即性能?
查看完整描述

3 回答

?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

好吧,在性能上沒有雙重檢查的鎖定。這是一個壞的模式。

把情感放在一邊,volatile是因為沒有它,當第二個線程通過時instance == null,第一個線程可能不會構造new Singleton()然而:沒有人承諾創造這個物體。發生-之前指派給instance對于除實際創建對象的線程之外的任何線程。

volatile反過來建立發生-之前讀寫之間的關系,并修復中斷的模式。

如果您正在尋找性能,請使用Holding內部靜態類代替。


查看完整回答
反對 回復 2019-06-21
  • 3 回答
  • 0 關注
  • 789 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號