1. 程式人生 > >六種執行緒安全的單例模式

六種執行緒安全的單例模式

單例模式怕是很多程式設計師使用最多的設計模式了,面向物件的23種設計模式點這裡。廢話不多說,直接上程式碼:

public class Singleton {  //1.懶漢型
    private static Singleton instance;  
    private Singleton (){}  
    public static synchronized Singleton getInstance() {  
    if (instance == null) {  
        instance = new Singleton();  
    }  
    return
instance; } }
public class Singleton {  //2.餓漢型
    private static Singleton instance = new Singleton();  
    private Singleton (){}  
    public static Singleton getInstance() {  
    return instance;  
    }  
} 
public class Singleton {  //3.內部型別,可看做餓漢變種
    private static class SingletonHolder {  
    private
static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
public class Singleton {  //4.雙重校驗鎖,1.5以後可用
    private static Singleton singleton;  
    private Singleton
(){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
public enum Singleton {  //5.列舉型,Effective Java作者提倡的。可防止反序列化
    INSTANCE;  
    public void whateverMethod() {  
    }  
}  
public class Singleton {  //6.靜態型,全部靜態方法和屬性
    private Singleton (){}  
    public static void whateverMethod() {  
    }  
}  

現在有六種,那麼推薦哪一種呢。其實我個人比較懶,所以推薦5和6這種字少的。6呢可以繼承,但重寫方法就違反了里氏替換原則,所以繼承的時候要記得只採取不同的子類擴充套件不同的方法。

相關推薦

[C++][執行安全]模式下雙檢查鎖和執行

問題 在設計模式中,有一個很經典的模式-單例模式,它可能是實現上最簡單的模式,在程式碼中也經常使用,在單執行緒下,毫無疑問延遲化載入是比較常用的,但是在多執行緒條件下,單例模式的延遲載入可能就會出現一些問題。 如以下的程式碼: T* GetInstance(

C++的模式執行安全模式(懶漢/餓漢)

單例模式 單例模式:是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個例項。即一個類只有一個物件例項。   實現簡單的單例模式:建構函式宣告為private或protect防止被外部函式

執行安全模式

單例模式怕是很多程式設計師使用最多的設計模式了,面向物件的23種設計模式點這裡。廢話不多說,直接上程式碼: public class Singleton { //1.懶漢型 privat

執行安全設計模式+序列化

懶漢式單例模式會引來執行緒安全問題,即多執行緒時可能會建立多個例項,而且在反序列化時也可能會建立新的例項。看了大大們的實現方式,覺得以下一種比較簡單方便理解。 一、下面是會造成執行緒安全的餓漢單例模式。用四列印下會發現hashcode不一致 public class Singleton {

日常小結-多執行模式的三實現方式

多執行緒單例模式在很多併發的書裡面都有寫。這裡做一個簡單的總結。主要內容來自《java併發程式設計的藝術》《java多執行緒程式設計核心》 單例模式的分類 餓漢模式:類初始化的時候就進行建立單例模式 懶漢模式:在呼叫getinstance方法的時候才建

java通過雙重檢測或列舉類實現執行安全(懶漢模式)

雙重檢測實現 /** * 懶漢模式->雙重同步鎖單例模式 */ public class SingletonExample5 { private SingletonExample5() { } //volatile + 雙重檢測機制 -> 禁止指令重排序

執行涉及模式

/** * 單例模式涉及的兩個問題 * * @author 羅摩銜那 * */ /* * 惡漢式 * 優點:當類被載入的時候,已經建立好了一個靜態的物件,因此,是執行緒安全的 * 缺點:這個物件還沒有被使用就被創建出來了 */ class Single { private s

高效能的執行安全——Java基礎語法系列

大家都知道,一般實現單例有兩種寫法: 餓漢式 和 懶漢式, 餓漢式是執行緒安全的,在編譯期間已完成初始化,載入到了記憶體裡。 懶漢式一般寫法是非執行緒安全的, 那懶漢式的執行緒安全單例應該如何實現呢,以及如何寫出低耗能的執行緒安全單例呢 ? 單例實現關鍵點 建構函式私有,

Qt下實現支援多執行模式

1. 程式碼介紹 實現單例模式的程式碼很多。 本文的單例模式實現程式碼是本人一直在工程專案中使用的,現拿出和大家交流分享。 本文實現的單例模式,支援多執行緒,採用雙重校驗檢索的方式,整合析構類,杜絕記憶體洩漏,穩定性好。 使用C++/Qt的朋友們可以瞭解一下。 不再廢話,直接上程式碼。

執行安全(與多)

      又週五了,時間過得好快,住在集體宿舍,幾個宅男共處一室好是無聊,習慣性來到CSDN。今天一個應屆生同事突然問我為什麼老大要求我們不要在Service裡寫成員變數,說不安全,說為什麼不安全讓他自己去了解,看上去他沒有找到頭緒很是痛苦,想想當初這個問題也困擾過自己,向

JAVA_多執行_模式

這篇是入職之後的第二篇了,上一篇我簡單介紹了一下LOCK裡面的類的方法,感興趣的話可以去了解一下,以後堅持每週至少會更新一篇關於多執行緒方面的文章,希望博友們可以一起加油成長。 這篇主要的內容是單例模式在多執行緒環境下的設計,這篇算是比較重要的內容,我會進行文字和程式碼的共同說明來講解記錄 1、立即載入(餓

【Java多執行模式與多執行

單例模式大家都不陌生,即讓一個類只有一個例項。 單例模式分為懶漢式和餓漢式。 懶漢式☞方法呼叫時再例項化物件,什麼時候用什麼時候例項化,比較懶。 餓漢式☞方法呼叫前物件就已經建立好了,比較有捉急。 本文著重描述懶漢式與多執行緒的內容。 1.餓漢式 public

Java多執行模式-yellowcong

我們常見的單利模式有餓漢式和懶漢式,懶漢式,就是在用的時候,再例項化物件,餓漢式,是還沒有開飯,就已經把物件例項化好了。在多執行緒開發中,解決單例的時候,有兩種解決方案,1、(懶漢式)同步程式碼塊

Java模式的三執行安全版本

Double check public class Singleton{ private static class SingletonHolder{ private static Singleton instance = new Singleton(); } private Sing

模式的四執行安全的實現

1.描述:    Singleton(單例)是設計模式的一種,為了保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。2.主要特點:    1)單例類確保自己只有一個例項(建構函式私有:不被外部例項化,也不被繼承)。    2)單例類必須自己建立自己的例項。    3)單例類必須為其他物件提供唯一的例項

Java多執行-48-設計模式

前面學習了多執行緒的一些知識,這篇來學習並掌握什麼是單例設計模式,以及常見的單例模式寫法有哪些。先來理解什麼是單例模式,單例就是保證類在記憶體中只有一個物件。我們知道,類是可以通過多種方式去獲取物件,例如常見的new物件。在記憶體中只有一個物件,如果這句話不好理解。這裡,很多人都用過seleni

執行呼叫類中的方法會不會造成執行安全問題

區域性變數不會受多執行緒影響 成員變數會受到多執行緒影響 多個執行緒應該是呼叫的同一個物件的同一個方法: 如果方法裡無成員變數,那麼不受任何影響 如果方法裡有成員變數,只有讀操作,不受影響                      存在寫操作,考慮多執行緒影響值 當多個執行

singleton模式執行安全的實現

1.描述:     Singleton(單例)是設計模式的一種,為了保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。 2.主要特點:     1)單例類確保自己只有一個例項(建構函式私有:不被外部例項化,也不被繼承)。     2)單例類必須自己建立自己

方式構建C#模式

同時 編譯 lec moni 單例對象 spa code exc 另一個 1 /// <summary> 2 /// 雙檢鎖實現單例 3 /// </summary> 4 public sealed

Java併發程式設計(3)-構造執行安全類的模式

文章目錄 一、例項限制模式 1.1、 限制變數確保執行緒安全 1.2、分析ArrayList的執行緒安全性 1.3、總結 二、委託執行緒安全模式 2.