立即載入(使用類的時候已經將物件建立完畢 實現辦法就是直接new例項化):也稱為餓漢模式
private static myobject myobject = new myobject();
public static myobject geinstance()
延遲載入,懶漢模式
private static myobject myobject;
public static myobject getinstance() else
return myobject;
}在多執行緒的環境中,就會出現多個例項,與單例模式的初衷相背離
解決:1給getinstance()加鎖,synchronized。。。弊端:執行效率非常低下
2:把getinstance()的方法體放入同步**塊中 、、、弊端: 執行效率也是非常低
3:針對部分重要的**進行單獨的同步,只同步 myobject = new myobject(); 錯誤:得到的不是同乙個例項物件
4:使用 dcl雙檢查鎖機制 可以解決多執行緒 單例模式的非執行緒安全問題
private static myobject myobject;
public static myobject getinstance() else }}
return myobject;}
5使用靜態內建類實現單例模式 弊端:遇到序列化物件時,使用預設的方式執行得到的結果還是多例,
private static class myobjecthandler
public static myobject getinstance()
6使用static**塊實現單例模式
private static myobject instance = null;
private myobject ()
static
public static myobject getinstance()
7使用enum型別實現單例模式 弊端:將列舉型別進行暴露,違反了「職責單一原則」
public enum myobjects catch (exception e)
}public connection getconnection()
外部呼叫獲取單例
myobjects.connectionfactory.getconnection().hascode();
ps:完善:整個列舉類以內建類的方式寫入另外的類中,在其類中寫乙個getconnection的方法,方法體就是myobjects.connectionfactory.getconnection().hascode();
多執行緒 單例模式與多執行緒
一 前言 如何使單例模式遇到多執行緒是安全的 正確的?我們在學習設計模式的時候知道單例模式有懶漢式和餓漢式之分。簡單來說,餓漢式就是在使用類的時候已經將物件建立完畢,懶漢式就是在真正呼叫的時候進行例項化操作。二 餓漢式 多執行緒 public class myobject public static...
多執行緒 多執行緒 單例設計模式
多執行緒之 單例設計模式 餓漢式 多執行緒安全 1 餓漢式 class single static single getinstance public void show class a implements runnable class test catch interruptedexceptio...
單例模式與多執行緒
立即載入就是使用類的時候已經將物件建立完畢,常見的實現辦法就是直接new例項化,在呼叫方法前例項已經被建立了.利用getinstance 獲得乙個物件.延遲載入就是在呼叫get 方法時例項才被建立,常見的實現辦法就是在get 方法中進行new例項化,在呼叫方法時例項才被建立.利用get 獲得乙個物件...