1. 程式人生 > >單例模式學習—懶漢模式

單例模式學習—懶漢模式

        在學習了多執行緒課程中關於單例模式部分後記錄一些知識點。

常見的單例模式一:懶漢模式。

public class Singleton {

    private Singleton() {
        //初始化
}
    private static Singleton instance = null;

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return 
instance; } }

分析:在單執行緒中能保證建立唯一的例項。但是在多執行緒的情況下可能會出現錯誤。

錯誤原因:當A執行緒訪問到1(if判斷)時,CPU被執行緒B所佔據此時instance還未初始化依舊為null。所以B執行緒建立了一個instance然後A也建立了一個instance。

測試程式碼:

public class ThreadA extends Thread {

    public void run(){
        System.out.println(Singleton.getInstance().hashCode());
    }

    public static void 
main(String[] args) { ThreadA t1 = new ThreadA(); ThreadA t2 = new ThreadA(); ThreadA t3 = new ThreadA(); t1.start(); t2.start(); t3.start(); } }

          結果:1217036164、2140075580、2140075580

        hashcode不相同證明不是同一個物件=》不是單例=》執行緒不安全

相關推薦

模式學習懶漢模式

        在學習了多執行緒課程中關於單例模式部分後記錄一些知識點。常見的單例模式一:懶漢模式。public class Singleton { private Singleton() { //初始化 } private static S

模式懶漢模式以及餓漢模式的區別及應用

1.單例模式 單例模式就是系統執行期間,有且僅有一個例項。它有三個必須滿足的關鍵點: (1)一個類只有一個例項。這是滿足單例模式最基本的要求,若滿足這個關鍵點,只能提供私有的構造器,即保證不能隨意建立該類的例項。示例如下: //讀取配置檔案的工具類—單例模式 public class Con

【C++】模式:餓漢模式懶漢模式

餓漢模式:提前建立一個靜態的類物件,把所有能夠建立物件的模組全部私有化,從外部需要建立類物件時只能返回事先建立好的唯一物件。就像一個特別飢餓的人,提前準備好食物,只要餓了,就可以立刻食用。 /*惡漢模式--單例模式*/ #include<iostream> using namespa

模式懶漢模式與餓漢模式

/** * @author 萬星明 * @version 建立時間:2018年10月26日 下午4:32:10 * 請編寫一個單例模式,類名自己定義(不允許出現無意義命名)。 * 分別用懶

java 模式之執行緒安全的餓漢模式懶漢模式

單例模式 解決的問題:保證一個類在記憶體中的物件唯一性. 比如:多程式讀取一個配置檔案時,建議配置檔案封裝成物件。會方便操作其中資料,又要保證多個程式讀到的是同一個配置檔案物件, 就需要該配置檔案物件在記憶體中是唯一的。 如何保證物件唯一性呢? 思想: 1,不讓其他程式建立

小菜學習設計模式(二)—(Singleton)模式

前言 設計模式目錄: 本篇目錄: 簡單實現 執行緒安全 後記   單例模式(Singleton)可以說是最簡單的模式,對.net來說,因為不需要考慮到垃圾回收機制,實現起來很簡單,但是對於沒有提供記憶體管理的平臺來說,比如C++,因為單例模式只考慮建立物件,所以

模式,餓漢模式懶漢模式

什麼是單例?單例就是系統執行過程中有且僅有一個例項存在, 即:一個類只有一個例項--最基本的要求(只提供私有構造器),它必須自己建立這個例項(定義靜態的該類的私有物件),它必須自行向整個系統提供這個例項(提供一個靜態的公有方法,返回建立或者獲取本身的靜態私有物件); 單例模

模式(餓漢模式懶漢模式

單例模式也叫單件模式。Singleton是一個非常常用的設計模式,幾乎所有稍微大一些的程式都會使用到它,所以構建一個執行緒安全並且高效的Singleton很重要。 單例模式的特點: 1>單例類保證全域性只有一個唯一例項物件。 2>單例類提供獲取

模式懶漢模式與餓漢模式

1.單例模式: 應用場景:當系統中只需要一個物件就夠了,如工作管理員、古代皇帝、現代老婆 作用:保證在一個系統中有且只有一個例項 型別:餓漢模式、懶漢模式 2.餓漢模式: public class Singleton { //1.私有化

Java模式懶漢模式及餓漢模式

單例模式 單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 這種模式涉及到一個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一

C++中的模式懶漢模式、餓漢模式及執行緒安全問題)

1 教科書裡的單例模式   我們都很清楚一個簡單的單例模式該怎樣去實現:建構函式宣告為private或protect防止被外部函式例項化,內部儲存一個private static的類指標儲存唯一的例項,例項的動作由一個public的類方法代勞,該方法也返回單例類唯一的例

模式懶漢模式(延遲載入)

什麼是延遲載入?延遲載入就是在呼叫get()方法時候建立,常見的方法就是在 get()中例項化。 看實現程式碼: package test; public class MyObject { private static MyObject myObject; pri

設計模式(C#) 懶漢模式

輸出結果 DesignPattern.LazySingle.Method:39086322 DesignPattern.LazySingle.Method:39086322 DesignPattern.LazySingle.Method:39086322 DesignPattern.LazySingl

模式比較懶漢模式的優化程式碼

public class Singleton1 { private static Singleton1 instance = nu

Java(singleton)模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類一個類只有一個例項。即一個類只有一個物件例項。 單例模式的一個例子: 1、建立一個Singleton類 public class SingleO

【java設計模式】之 (Singleton)模式

1. 單例模式的定義         單例模式(Singleton Pattern)是一個比較簡單的模式,其原始定義如下:Ensure a class has only one instance, and provide a global point of access

設計模式--的7種模式

/* 1. 餓漢式:類初始化時,會立即載入該物件,執行緒天生安全,呼叫效率高。 2. 懶漢式: 類初始化時,不會初始化該物件,真正需要使用的時候才會建立該物件,具備懶載入功能。 3. 靜態內部方式:結合了懶漢式和餓漢式各自的優點,真正需要物件的時候才會載入,載入類是執行緒安全

設計模式的征途—1.(Singleton)模式

  單例模式屬於建立型模式的一種,建立型模式是一類最常用的設計模式,在軟體開發中應用非常廣泛。建立型模式將物件的建立和使用分離,在使用物件時無需關心物件的建立細節,從而降低系統的耦合度,讓設計方案更易於修改和擴充套件。每一個建立型模式都在檢視回答3個問題:3W -> 建立什麼(What)、由誰建立(Wh

iOS開發單模式懶漢模式&惡漢模式

1.單利模式概述 單例模式是iOS常用設計模式中的一種。單例設計模式的作用是使得這個類的一個物件成為系統中的唯一例項,因此需要用一種唯一的方法去建立這個物件並返回這個物件的地址。那麼,我們何時使用單例

使用和工廠設計模式實現dao實現層的解耦

建立Dao具體例項的工廠:         工廠解耦: 只需在配置檔案中改動,而不需要修改原始碼                       各層之間耦合性極低       使用的設計模式: 單例 和 工廠                       ***********