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