多執行緒程式設計之單例模式與多執行緒 學習筆記

2021-08-14 01:57:59 字數 1339 閱讀 8825

立即載入(使用類的時候已經將物件建立完畢 實現辦法就是直接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 獲得乙個物件...