最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java中的八種單例創(chuàng)建方式

 更新時間:2022年02月11日 14:27:49   作者:溫故知新之java  
單例設(shè)計(jì)模式,就是采取一定的方法保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實(shí)例,并且該類只提供一個取得其對象實(shí)例的方法。本文將詳細(xì)介紹Java中單例的八種創(chuàng)建方式,需要的可以參考一下

定義

單例設(shè)計(jì)模式,就是采取一定的方法保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實(shí)例,并且該類只提供一個取得其對象實(shí)例的方法(靜態(tài)方法)

使用場景

  • 對于一些需要頻繁創(chuàng)建銷毀的對象
  • 重量級的對象
  • 經(jīng)常使用到的對象
  • 工具類對象
  • 數(shù)據(jù)源
  • session

單例模式八種方式

餓漢式(靜態(tài)常量)

代碼

/**
 * 餓漢式(靜態(tài)常量)
 * 優(yōu)勢:簡單,避免多線程的同步問題
 * 劣勢:無懶加載,內(nèi)存浪費(fèi)
 * @author:liyajie
 * @createTime:2022/2/10 15:50
 * @version:1.0
 */
public class Singleton1 {
    // 私有化構(gòu)造方法
    private Singleton1(){}

    // 靜態(tài)常量
    private static final Singleton1 singleton1 = new Singleton1();

    // 對外提供公共方法
    public static Singleton1 getSingleton1(){
        return singleton1;
    }
}

分析

  • 優(yōu)勢:簡單,避免多線程的同步問題
  • 劣勢:無懶加載,內(nèi)存浪費(fèi)

餓漢式(靜態(tài)代碼塊)

代碼

/**
 * 餓漢式(靜態(tài)代碼塊)
 * 優(yōu)勢:簡單,避免多線程的同步問題
 * 劣勢:無懶加載,內(nèi)存浪費(fèi)
 * @author:liyajie
 * @createTime:2022/2/10 15:50
 * @version:1.0
 */
public class Singleton2 {
    // 私有化構(gòu)造方法
    private Singleton2(){}

    private static final Singleton2 singleton2;

    // 靜態(tài)代碼塊
    static {
        singleton2 = new Singleton2();
    }

    // 對外提供公共方法
    public static Singleton2 getSingleton2(){
        return singleton2;
    }
}

分析

  • 優(yōu)勢:簡單,避免多線程的同步問題
  • 劣勢:無懶加載,內(nèi)存浪費(fèi)

懶漢式(線程不安全)

代碼

/**
 * 懶漢式(線程不安全)
 * @author:liyajie
 * @createTime:2022/2/10 15:50
 * @version:1.0
 */
public class Singleton3 {
    // 私有化構(gòu)造方法
    private Singleton3(){}

    // 內(nèi)部屬性
    private static Singleton3 singleton3;

    // 對外提供公共方法
    public static Singleton3 getSingletons(){
        if(singleton3 == null){
            singleton3 = new Singleton3();
        }
        return singleton3;
    }
}

分析

  • 優(yōu)勢:起到了懶加載的效果 不會造成內(nèi)存浪費(fèi)
  • 劣勢:線程不安全 不推薦這種方式的

懶漢式(同步方法)

代碼

/**
 * 懶漢式(同步方法)
 * 優(yōu)勢:解決了線程同步問題
 * 劣勢:使用synchronized同步關(guān)鍵字,性能太低
 * @author:liyajie
 * @createTime:2022/2/10 15:50
 * @version:1.0
 */
public class Singleton4 {
    // 私有化構(gòu)造方法
    private Singleton4(){}

    // 內(nèi)部屬性
    private static Singleton4 singleton4;

    // 對外提供公共方法
    public static synchronized Singleton4 getSingleton4(){
        if(singleton4 == null){
            singleton4 = new Singleton4();
        }
        return singleton4;
    }
}

分析

  • 優(yōu)勢:解決了線程安全問題,
  • 劣勢:效率太低

懶漢式(同步代碼塊)

代碼

/**
 * 懶漢式(同步代碼塊)
 * @author:liyajie
 * @createTime:2022/2/10 15:50
 * @version:1.0
 */
public class Singleton5 {
    // 私有化構(gòu)造方法
    private Singleton5(){}

    // 內(nèi)部屬性
    private static Singleton5 singleton5;

    // 對外提供公共方法
    public static Singleton5 getSingleton5(){
        if (singleton5 == null){
            synchronized (Singleton5.class){
                singleton5 = new Singleton5();
            }
        }
        return singleton5;
    }
}

分析

  • 優(yōu)勢:起到了懶加載的效果 不會造成內(nèi)存浪費(fèi)
  • 劣勢:線程不安全 不推薦這種方式的

雙重檢查鎖方式

代碼

/**
 * 雙重檢查鎖機(jī)制
 * @author:liyajie
 * @createTime:2022/2/10 15:50
 * @version:1.0
 */
public class Singleton6 {
    // 私有化構(gòu)造方法
    private Singleton6(){}

    // 內(nèi)部屬性
    private volatile static Singleton6 singleton6;

    // 對外提供公共方法
    public static Singleton6 getSingleton6(){
        if (singleton6 == null){
            synchronized (Singleton6.class){
                if(singleton6 == null){
                    singleton6 = new Singleton6();
                }
            }
        }
        return singleton6;
    }
}

分析

  • 實(shí)現(xiàn)了懶加載,效率很高,解決了線程安全

靜態(tài)內(nèi)部類方式

代碼

/**
 * 靜態(tài)內(nèi)部類
 * @author:liyajie
 * @createTime:2022/2/10 15:50
 * @version:1.0
 */
public class Singleton7 {
    // 私有化構(gòu)造方法
    private Singleton7(){}

    // 內(nèi)部類
    private static class SingleInstance{
        public static final Singleton7 singleton7 = new Singleton7();
    }

    // 對外提供公共方法
    public static Singleton7 getSingleton7(){
        return SingleInstance.singleton7;
    }
}

分析

  • 不會出現(xiàn)線程安全問題 JVM來幫我們保證了線程的安全性
  • 利用靜態(tài)內(nèi)部類的特點(diǎn),效率也很高,
  • 實(shí)際開發(fā)中推薦使用的

枚舉方式

代碼

定義單例對象

/**
 * @desc:
 * @author:liyajie
 * @createTime:2022/2/11 10:25
 * @version:1.0
 */
public class Singleton {

    public void hello(){
        System.out.println("hello");
    }
}

定義枚舉實(shí)例化單例對象

/**
 * 枚舉方式
 * @author:liyajie
 * @createTime:2022/2/10 15:50
 * @version:1.0
 */
enum Singleton8 {
    // 相當(dāng)于public static final Singleton8 INSTANCE;
    // 保證了枚舉實(shí)例只能被實(shí)例化一次
    INSTANCE;

    // 定義單例變量
    private Singleton singleton;

    // 枚舉構(gòu)造方法,該構(gòu)造方法是private,執(zhí)行構(gòu)造方法的時候,同時創(chuàng)建我們的單例對象
    Singleton8() {
        singleton = new Singleton();
    }

    // 對外提供公共方法
    public Singleton getSingleton() {
        return singleton;
    }
}

使用方法Singleton8.INSTANCE.getSingleton()即可獲取我們的單例對象了

分析

  • 簡單,避免了線程安全問題
  • 實(shí)際開發(fā)中推薦使用的

總結(jié)

1.單例模式保證了系統(tǒng)內(nèi)存中該類只存在一個對象,節(jié)省了系統(tǒng)資源,對于一些需要頻繁創(chuàng)建銷毀的對象, 使用單例模式可以提高系統(tǒng)性能

2.當(dāng)想實(shí)例化一個單例類的時候,必須要記住使用相應(yīng)的獲取對象的方法,而不是使用new

3.單例模式推薦使用的方法有內(nèi)部靜態(tài)類方式和枚舉方式

到此這篇關(guān)于詳解Java中的八種單例創(chuàng)建方式的文章就介紹到這了,更多相關(guān)Java單例創(chuàng)建方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 讀取靜態(tài)資源文件的方法

    Spring Boot 讀取靜態(tài)資源文件的方法

    本篇文章主要介紹了Spring Boot 讀取靜態(tài)資源文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 詳解mybatis collection標(biāo)簽一對多的使用

    詳解mybatis collection標(biāo)簽一對多的使用

    這篇文章主要介紹了mybatis collection標(biāo)簽一對多的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Java文件快速copy復(fù)制實(shí)例代碼

    Java文件快速copy復(fù)制實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Java文件快速copy復(fù)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java代碼實(shí)現(xiàn)MD5加密及驗(yàn)證過程詳解

    java代碼實(shí)現(xiàn)MD5加密及驗(yàn)證過程詳解

    這篇文章主要介紹了java代碼實(shí)現(xiàn)MD5加密及驗(yàn)證過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • springboot(thymeleaf)中th:field和th:value的區(qū)別及說明

    springboot(thymeleaf)中th:field和th:value的區(qū)別及說明

    這篇文章主要介紹了springboot(thymeleaf)中th:field和th:value的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • jsp+dao+bean+servlet(MVC模式)實(shí)現(xiàn)簡單用戶登錄和注冊頁面

    jsp+dao+bean+servlet(MVC模式)實(shí)現(xiàn)簡單用戶登錄和注冊頁面

    這篇文章主要介紹了jsp+dao+bean+servlet(MVC模式)實(shí)現(xiàn)簡單用戶登錄和注冊頁面,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Hibernate validator使用以及自定義校驗(yàn)器注解

    Hibernate validator使用以及自定義校驗(yàn)器注解

    這篇文章主要介紹了Hibernate validator使用以及自定義校驗(yàn)器注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Spring Cloud Hystrix 服務(wù)容錯保護(hù)的原理實(shí)現(xiàn)

    Spring Cloud Hystrix 服務(wù)容錯保護(hù)的原理實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud Hystrix 服務(wù)容錯保護(hù)的原理實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 在Spring Boot2中使用CompletableFuture的方法教程

    在Spring Boot2中使用CompletableFuture的方法教程

    這篇文章主要給大家介紹了關(guān)于在Spring Boot2中使用CompletableFuture的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2019-01-01
  • String類型轉(zhuǎn)localDate,date轉(zhuǎn)localDate的實(shí)現(xiàn)代碼

    String類型轉(zhuǎn)localDate,date轉(zhuǎn)localDate的實(shí)現(xiàn)代碼

    這篇文章主要介紹了String類型轉(zhuǎn)localDate,date轉(zhuǎn)localDate的實(shí)現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論

永吉县| 溧水县| 黔西县| 曲沃县| 中超| 承德县| 花莲市| 苗栗市| 饶河县| 突泉县| 蒲江县| 工布江达县| 岚皋县| 昌邑市| 囊谦县| 舒城县| 犍为县| 仙游县| 沅陵县| 青铜峡市| 丰县| 靖宇县| 寿阳县| 乌拉特前旗| 肃南| 山西省| 新民市| 馆陶县| 潞城市| 洪泽县| 宁安市| 麦盖提县| 克山县| 东海县| 甘南县| 绥滨县| 纳雍县| 宁波市| 商南县| 玉山县| 女性|