單例模式(Single),顧名思義阿。就是這個類的實例(也就是對象),有且只有一個java
這樣就能夠達到複用的結構,也無需浪費jvm的內存空間。併發
單例模式呢,又分兩種.一種是餓漢式加載,另外一種是懶漢式加載。jvm
先上餓漢式加載吧ui
/** * 餓漢式加載 */ public class Quick { private static Quick quick = new Quick(); public static Quick getInstance(){ return quick; } }
下面是懶漢式線程
/** * 懶漢式加載 */ public class Lazy { private static Lazy lazy; public static Lazy getInstance() { if (lazy != null) {//當已經建立過實例了,直接返回 return lazy; } else { synchronized (lazy) { if (lazy != null) { return lazy; } else { lazy = new Lazy(); return lazy; } } } } }
相信你們這裏看到了代碼塊,爲何這麼個寫法呢code
1.若是是同步方法的話,那效率很是低.特別是當實例已經建立的狀況下(已經不能併發獲取了)對象
2.同步代碼塊裏面爲啥還要再加個判斷呢,這是由於併發的狀況下.在實例化的過程當中有多個線程調用了此方法內存
而同步的調用代碼塊,因此這裏須要再加一層判斷get