單例模式分為餓漢式和懶漢式,區(qū)別在于懶漢式是延時(shí)加載所以線程并不是安全的谈竿,如果同時(shí)兩個(gè)線程去創(chuàng)建單例對(duì)象這樣就會(huì)造成線程安全問題,需要進(jìn)行一些同步鎖的操作來進(jìn)行線程安全管理,而餓漢式是一種預(yù)加載的方式轿亮,保證了統(tǒng)一的實(shí)例不會(huì)造成線程安全問題。
餓漢式:
//在自己內(nèi)部定義自己的一個(gè)實(shí)例胸墙,只供內(nèi)部調(diào)用
private static final SingIn instance = new SingIn();
private SingIn(){}
//這里提供了一個(gè)供外部訪問本class的靜態(tài)方法我注,可以直接訪問
public static SingIn getInstance(){
return instance;
}
懶漢式:
private static SingIn instance = null;
public static synchronized SingIn getInstance() {
// 這個(gè)方法比上面有所改進(jìn),不用每次都進(jìn)行生成對(duì)象迟隅,只是第一次
// 使用時(shí)生成實(shí)例但骨,提高了效率!
if (instance == null)
instance = new SingIn();
return instance;
}