單例模式的幾種實現方式比較

2021-07-24 09:58:34 字數 1038 閱讀 9290

首先上乙個最簡單的demo

public class singleton 

private static singleton instance = new singleton();

public static singleton getinstance()

public static void createstring()

}

優點:簡單可靠

缺點:單例變數沒有使用懶載入。jvm載入此單例時,單例物件就會建立。呼叫createstring的靜態方法,不需要使用到單例變數,但是該變數還是初始化。

改進版懶載入單例demo

public class lazysingleton 

private static lazysingleton instance = null;

public static synchronized lazysingleton getinstance()

public static void createstring()

}

優點:使用了懶載入的方式,確保系統啟動時沒有額外的負載。

缺點:獲取單例的方法使用了同步的方式。時耗稍微比大於第一種單例模式。至於為什麼一定要使同步?因為在多執行緒的情況下,執行緒1正在建立單例時,完成賦值前,執行緒2可能判斷instance為空,故執行緒2也會new乙個例項。而導致多個例項建立。

第三種單例模式(推薦)

public class staticsingleton 

private static class singletonholder

public static staticsingleton getinstance()

public static void createstring()

}

優點:使用內部類的方式實現單例,既可以做到延遲載入,也不必使用同步關鍵字。

單例模式實現方式比較

單例模式實現方式 執行緒安全 延遲載入 反射安全 序列化安全 餓漢模式 懶漢模式 非空判斷 懶漢模式 方法加鎖 懶漢模式 雙重檢查鎖 靜態內部類 列舉 餓漢 author zhouxiaobing public class singleton implements serializable priv...

單例模式實現的幾種方式

單例模式三個主要特點 1 構造方法私有化 2 例項化的變數引用私有化 3 獲取例項的方法共有。package com.ctl.singleton 懶漢式單例 該模式的特點是類載入時沒有生成單例,只有當第一次呼叫 getlnstance 方法時才去建立這個單例 注意 如果編寫的是多執行緒程式,則不要刪...

單例模式的幾種實現方式

單例模式莫過於是我們最常用的設計模式之一了,它的優缺點就是 優也單例,缺也單例 當然應用它方面優點還是較多些的,所以下面我們看看,常用的幾種實現方式有哪些吧。這種是最基本的實現方式,最大的問題就是不支援多執行緒,由於沒有加鎖,嚴格上並不算單例模式。public class singleton pub...