通常會使用的這樣的寫法來實現單例:
public class singleton
private static singleton instance = null;
public static singleton getinstance()
return instance;
}
}
單例的目的是為了保證執行時singleton類只有唯一的乙個例項,最常用的地方比如拿到資料庫的連線,spring的中建立beanfactory這些開銷比較大的操作,而這些操作都是呼叫他們的方法來執行某個特定的動作。
面試官的問題是:單
例會帶來什麼問題?
我第一反映就是如果多個執行緒同時呼叫這個例項,會有執行緒安全的問題,當時就這麼說了,然後他問:「怎麼實現乙個執行緒安全的單例模式呢?」
這個問題我沒有回答上來,當時腦子裡閃了一下如果用synchronized來鎖定可能會有一些問題,至於是什麼問題沒有想明白,就選擇沒有回答。
這裡請問各位高手,
1、如果不執行修改物件的操作的情況下,單單執行乙個讀取操作,還有沒有進行同步的必要?
2、保證單例的執行緒安全使用synchronized會產生什麼樣的問題?
3、不使用synchronized,有什麼方式來保證執行緒安全?
4、假如下次再面試遇到這種情形,用什麼方式回答會使面試官感到比較滿意?
回答:
public class singleton
// 載入class時立即初始化
private static singleton instance = new singleton();
public static singleton getinstance()
}
當然這種也有缺點,instance會立即初始化,而不管是否實際用到。 單例模式學習
通常情況下我們可以讓乙個全域性變數使得乙個物件被訪問,但不能防止你例項化多個物件,乙個最好的方法就是,讓類自身負責儲存他的唯一例項。這個類可以保證沒有其他例項可以被建立,並且他可以提供乙個訪問該例項的方法。一 經典單例 public class singleton public static sin...
學習單例模式
1 單例模式是怎樣產生的?當想要讓乙個定義類只能例項化乙個物件,則不能對外提供public的構造方法,而是要把構造方法定義為private的,這樣就可以讓定義類自己控制類的例項化。同時,也要對外提供乙個public的方法,用來得到定義類的例項。當然,在定義類的內部需要初始化來建立自身的乙個例項 保證...
單例模式學習
單例模式實現 一.實現雙重校驗鎖 public class singleton public static singleton getsingleton return singleton 特點 通過關鍵字synchronized保證高併發下,初始化物件為單例。缺點效能較差,物件屬性需要volatil...