摘要:基本的單例模式實現方式但是不足之處是,的創建時間不受控制。結合兩種單例模式的實現方式這種方式沒有加鎖,在并發模式下性能優越,而且只有在方法被第一次調用時,實例才會被創建。高并發程序設計第章并行模式與算法
基本的單例模式實現方式
public class Singleton { private Singleton () { System.out.println("Singleton is created"); } private static Singleton instance = new Singleton(); public static Singleton getInstance () { return instance; } }
但是不足之處是,Singleton的創建時間不受控制。對于靜態成員instance, 它會在類第一次初始化的時候被創建,但這個時刻并不一定是getInstance()方法第一次被調用的時候。例如:
public class Singleton { public static int STATUS = 1; private Singleton () { System.out.println("Singleton is created"); } private static Singleton instance = new Singleton(); public static Singleton getInstance () { return instance; } }
注意這里的單例包含一個靜態成員STATUS, 此時在任意地方引用這個STATUS都會導致Singleton這個類被初始化,并創建instance實例。
延遲加載的單例模式實現方式public class LazySingleton { private LazySingleton() { System.out.println("Singleton is created"); } private static LazySingleton instance = null; public static synchronized LazySingleton getInstance() { if (instance == null) instance = new LazySingleton(); return instance; } }
這樣在調用getInstance()方法的時候才會創建單例對象。但是壞處是在并發環境下加鎖,會對性能產生影響。
結合兩種單例模式的實現方式public class StaticSingleton { private StaticSingleton() { System.out.println("Singleton is created"); } private static class SingletonHolder { private static StaticSingleton instance = new StaticSingleton(); } public static StaticSingleton getInstance() { return SingletonHolder.instance; } }
這種方式沒有加鎖,在并發模式下性能優越,而且只有在getInstance()方法被第一次調用時,StaticSingleton實例才會被創建。
《Java高并發程序設計》第5章 · 并行模式與算法
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70239.html
摘要:上面是簡單的單例模式,自己寫程序的話夠用了,如果想繼續延伸,請傳送至大話設計模式之單例模式升級版 看了那么多單例的介紹,都是上來就說怎么做,也沒見說為什么這么做的。那小的就來說說為什么會有單例這個模式以便更好的幫助初學者真正的理解這個設計模式,如果你是大神,也不妨看完指正一下O(∩_∩)O首先我不得不吐槽一下這個模式名字單例,初學者通過字面很難理解什么是單例,我覺得應該叫唯一模式更貼切...
摘要:在設計模式一書中,將單例模式稱作單件模式。通過關鍵字,來保證不會同時有兩個線程進入該方法的實例對象改善多線程問題為了符合大多數程序,很明顯地,我們需要確保單例模式能在多線程的情況下正常工作。 在《Head First 設計模式》一書中,將單例模式稱作單件模式。這里為了適應大環境,把它稱之為大家更熟悉的單例模式。 一、了解單例模式 1.1 什么是單例模式 單例模式確保一個類只有一個實例,...
摘要:用來指向已創建好的實例構造函數為空注意這里是關鍵這是我們需要調用的方法把函數也定義為空,這樣就大功告成啦。 接上一篇大話PHP設計模式之單例模式 這一篇介紹一下升級版的單例模式,廢話不說先上代碼 不完美的單例模式 class singleMode { //用來指向已創建好的實例 public static $instance; //判斷是...
摘要:總之,選擇單例模式就是為了避免不一致狀態,避免政出多頭。二餓漢式單例餓漢式單例類在類初始化時,已經自行實例化靜態工廠方法餓漢式在類創建的同時就已經創建好一個靜態的對象供系統使用,以后不再改變,所以天生是線程安全的。 概念: Java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,這里主要介紹兩種:懶漢式單例、餓漢式單例。 單例模式有以下特點: 1、單例類只能有一個實例。 ...
摘要:本系列為設計模式與開發實踐作者曾探學習總結,如想深入了解,請支持作者原版單例模式實現單例模式單例模式的定義是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 本系列為《JavaScript設計模式與開發實踐》(作者:曾探)學習總結,如想深入了解,請支持作者原版 單例模式 實現單例模式 單例模式的定義是:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。單例模式是一種常用的模式...
摘要:博主按每天一個設計模式旨在初步領會設計模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語言實現。單例模式用途如果一個類負責連接數據庫的線程池日志記錄邏輯等等,此時需要單例模式來保證對象不被重復創建,以達到降低開銷的目的。 博主按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語言實現。誠然,每種設計模式都有多種實...
閱讀 1346·2023-04-25 15:21
閱讀 2680·2021-11-24 10:23
閱讀 3404·2021-10-11 10:59
閱讀 3252·2021-09-03 10:28
閱讀 1735·2019-08-26 13:45
閱讀 2328·2019-08-26 12:11
閱讀 928·2019-08-26 12:00
閱讀 1713·2019-08-26 10:44