欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java詳細介紹單例模式的應(yīng)用

 更新時間:2022年09月23日 09:19:05   作者:方片6  
單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式

一、什么是單例模式

單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。

這種模式涉及到一個單一的類,該類負責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。

注意:

1、單例類只能有一個實例。

2、單例類必須自己創(chuàng)建自己的唯一實例。

3、單例類必須給所有其他對象提供這一實例。

二、實現(xiàn)單例模式的幾種方法

1.懶漢模式(線程不安全)

2.懶漢模式(線程安全)

3.餓漢模式

4.雙檢鎖/雙重校驗鎖

5.登記式/靜態(tài)內(nèi)部類

6.枚舉

1. 懶漢模式(線程不安全)

是否 Lazy 初始化:是

是否多線程安全:否

實現(xiàn)難度:易

描述:這種方式是最基本的實現(xiàn)方式,這種實現(xiàn)最大的問題就是不支持多線程。因為沒有加鎖 synchronized,所以嚴格意義上它并不算單例模式。

public class A{
	// 懶漢模式
	private static A a = null;
	// 私有化構(gòu)造方法
	private A(){};
	public static A getInstance(){
		if(a == null){
			a = new A();
		}
		return a;
	}
}

2. 懶漢模式(線程安全)

是否 Lazy 初始化:是

是否多線程安全:是

實現(xiàn)難度:易

描述:這種方式具備很好的 lazy loading,能夠在多線程中很好的工作,但是,效率很低,99% 情況下不需要同步。

優(yōu)點:第一次調(diào)用才初始化,避免內(nèi)存浪費。

缺點:必須加鎖 synchronized 才能保證單例,但加鎖會影響效率。

public class A{
	// 懶漢模式
	private static A a = null;
	private A(){};
	public static synchronized A getInstance(){
		if(a == null){
			a = new A();
		}
		return a;
	}
}

3. 餓漢模式

是否 Lazy 初始化:否

是否多線程安全:是

實現(xiàn)難度:易

描述:這種方式比較常用,但容易產(chǎn)生垃圾對象。

優(yōu)點:沒有加鎖,執(zhí)行效率會提高。

缺點:類加載時就初始化,浪費內(nèi)存。

public class B{
	// 餓漢模式
	private static B b = new B();
	public static B getInstance(){
		return b;
	}
}

到此這篇關(guān)于Java詳細介紹單例模式的應(yīng)用的文章就介紹到這了,更多相關(guān)Java單例模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?Optional用法面試題精講

    Java?Optional用法面試題精講

    這篇文章主要為大家介紹了Java?Optional用法面試題精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 基于RecyclerChart的KLine繪制詳解

    基于RecyclerChart的KLine繪制詳解

    這篇文章主要為大家詳細介紹了基于RecyclerChart實現(xiàn)KLine繪制的相關(guān)資料,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • MyBatis中的resultMap簡要概述

    MyBatis中的resultMap簡要概述

    這篇文章主要介紹了MyBatis中的resultMap簡要概述的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 在IDEA中創(chuàng)建Web項目的詳細過程

    在IDEA中創(chuàng)建Web項目的詳細過程

    這篇文章主要給大家介紹了關(guān)于在IDEA中創(chuàng)建Web項目的詳細過程,很多朋友可能在學(xué)習(xí)java基礎(chǔ)的時候已經(jīng)熟練掌握了IDEA創(chuàng)建java項目的基本步驟,但隨著學(xué)習(xí)技術(shù)的不斷深入,不同的IDEA版本可能在項目的創(chuàng)建頁面上出現(xiàn)些許的出入,需要的朋友可以參考下
    2023-10-10
  • SpringBoot源碼剖析之屬性文件加載原理

    SpringBoot源碼剖析之屬性文件加載原理

    這篇文章主要給大家介紹了關(guān)于SpringBoot源碼剖析之屬性文件加載原理的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • java中 IO 常用IO操作類繼承結(jié)構(gòu)分析

    java中 IO 常用IO操作類繼承結(jié)構(gòu)分析

    本篇文章小編為大家介紹,java中 IO 常用IO操作類繼承結(jié)構(gòu)分析。需要的朋友參考下
    2013-04-04
  • java教學(xué)筆記之對象的創(chuàng)建與銷毀

    java教學(xué)筆記之對象的創(chuàng)建與銷毀

    面向?qū)ο蟮木幊陶Z言使程序能夠直觀的反應(yīng)客觀世界的本來面目,并且使軟件開發(fā)人員能夠運用人類認識事物所采用的一般思維方法進行軟件開發(fā),是當今計算機領(lǐng)域中軟件開發(fā)和應(yīng)用的主流技術(shù)。
    2016-01-01
  • 詳解Java中的線程模型與線程調(diào)度

    詳解Java中的線程模型與線程調(diào)度

    這篇文章主要介紹了詳解Java中的線程模型與線程調(diào)度的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-02-02
  • springboot+dynamicDataSource動態(tài)添加切換數(shù)據(jù)源方式

    springboot+dynamicDataSource動態(tài)添加切換數(shù)據(jù)源方式

    這篇文章主要介紹了springboot+dynamicDataSource動態(tài)添加切換數(shù)據(jù)源方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • IDEA創(chuàng)建SpringBoot項目整合mybatis時mysql-connector-java報錯異常的詳細分析

    IDEA創(chuàng)建SpringBoot項目整合mybatis時mysql-connector-java報錯異常的詳細分析

    最近工作中發(fā)現(xiàn)了個錯誤,分享給同樣遇到這個問題的朋友,這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建SpringBoot項目整合mybatis時mysql-connector-j報錯異常的詳細分析,需要的朋友可以參考下
    2023-02-02

最新評論