/**
* 方式一
* instance 單例初始值是null,還未構建,則構建單例物件並返回;是懶漢模式 - 執行緒不安全
* instance 單例物件一開始就被new 出來,主動構建,則不需要判空操作;是餓漢模式 - 執行緒安全
*/private zpdanlidemo(){}
private static zpdanlidemo instance = null;
public static zpdanlidemo getinstance()
return instance;
}
注:這種方式是執行緒不安全的,具體原因可以看注釋描述。
懶漢與餓漢兩種單例模式總是傻傻分不清,應用與面試的時候要多注意。
/**
* 方式二
*/private zpdanlidemo(){}
// volatile 物件new的時候,jvm執行順序保證正常執行
private volatile static zpdanlidemo instance = null;
public static zpdanlidemo getinstance() }}
return instance;
}
注:這種方式是執行緒安全
/**
* 方式三 靜態內部類實現單例模式
* 從外部是無法訪問靜態內部類lazyholder,只有當呼叫getinstance方法的時候,才能得到單例物件。
* instance 物件初始化的時機並不是在單例類zpdanlidemo被載入的時候,而是在呼叫getinstance方法,使得靜態內部類lazyholder被載入的時候。
* 因此這種實現方式是利用classloader的載入機制來實現懶載入,並保證構建單例的執行緒安全。
*/private zpdanlidemo(){}
private static class lazyholder
public static zpdanlidemo getinstance()
注:執行緒安全
使用靜態內部類構建單例,事件比較靠譜的一件事兒。個人喜好,是比較喜歡用這種方式。
使用反射機制打破單例
/**
* 利用反射打破單例
* 使用列舉可以防止反射構建
*/private void getdanli() catch (nosuchmethodexception e)
}
Android單例模式
單例模式singleton 應用場合 有些物件只需要乙個就足夠了,如古代皇帝 老婆 作用 保證整個應用程式中某個例項有且只有乙個 型別 餓漢模式 懶漢模式 public class singleton 2.建立類的唯一例項,使用private static修飾 private static sing...
Android單例模式
參考部落格 1 懶漢模式 每一次呼叫都要對方法進行加鎖,要維護鎖會導致效能損耗,其實不需要每次進入方法都加鎖,只需要第一次進入的時候防止多個執行緒產生多個單例即可。所以只需要在new singleton處加鎖即可,由此引出第二種模式,雙重鎖定模式。2 雙重鎖定模式 第一次生成完例項以後就直接返回例項...
Android 設計模式 單例模式
有哪些單例模式 實現方式1 雙重確認 double check lock dcl class singleton public void dosomething public static singleton getinstance return sinstande 為了減少重複 可用泛型來優化 抽...