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

Java設(shè)計(jì)模式之單例模式簡(jiǎn)析

 更新時(shí)間:2023年12月02日 09:13:20   作者:nuomizhende45  
這篇文章主要介紹了Java設(shè)計(jì)模式之單例模式簡(jiǎn)析,單例模式是常用的設(shè)計(jì)模式,在我們的系統(tǒng)乃至在框架中都普遍被用到,單例模式就是使一個(gè)類有且只有一個(gè)實(shí)例用于外部訪問,這樣大大的節(jié)省了系統(tǒng)的資源,需要的朋友可以參考下

什么是單例模式?

單例模式是常用的設(shè)計(jì)模式,在我們的系統(tǒng)乃至在框架中都普遍被用到,單例模式就是使一個(gè)類有且只有一個(gè)實(shí)例用于外部訪問,這樣大大的節(jié)省了系統(tǒng)的資源,而單例模式需要注意的也就以下三點(diǎn):

  • 保證這個(gè)類有且只有一個(gè)實(shí)例
  • 自行創(chuàng)建這個(gè)實(shí)例
  • 提供這個(gè)實(shí)例供外部訪問

代碼實(shí)現(xiàn)需要注意的就是

  • 單例模式的類構(gòu)造方法私有化
  • 這個(gè)類的定義中包含自己的一個(gè)靜態(tài)實(shí)例對(duì)象
  • 提供一個(gè)共有靜態(tài)方法供外部調(diào)用

三種實(shí)現(xiàn)方式

1、懶漢式

懶漢式與延遲初始化有些相似,就是沒人用的時(shí)候我不實(shí)例化出來(lái),有人需要調(diào)用了我再實(shí)例化出來(lái),JAVA代碼實(shí)現(xiàn)如下

public class SingletonClz{
    //實(shí)例
    private static SingletonClz instance = null; 
    //私有構(gòu)造
    private SingletonClz(){}
    //外部調(diào)用方法
    public static getInstance()
    {
        if(null == instance)
        {
            instance = new SingletonClz(); 
            return instance;  
        }
        else
        {
            return instance;
        }
    }
}

2、餓漢式

先實(shí)例化出來(lái),有人用就直接返回即可

public class SingletonClz{
    //實(shí)例
    private final static SingletonClz INSTANCE = new SingletonClz(); 
    //私有構(gòu)造
    private SingletonClz(){}
    //外部調(diào)用方法
    public static getInstance()
    {
         return instance;
    }
}

3、加鎖的單例模式

public class SingletonClz{
    //實(shí)例
    private static SingletonClz instance = null; 
    //私有構(gòu)造
    private SingletonClz(){}
    //外部調(diào)用方法
    public static getInstance()
    {
        synchronized(SingletonClz.class)
        {
            if(null == instance)
            {
                instance = new SingletonClz();  
            }
        }
            return instance;
    }
}

這里加一個(gè)重量級(jí)的鎖是為了防止并發(fā)的情況下兩個(gè)線程同時(shí)訪問這個(gè)方法同時(shí)發(fā)現(xiàn)instace為null,就都跑去實(shí)例化這個(gè)對(duì)象了。

加了一個(gè)synchronized鎖就防止了這一情況的發(fā)生,當(dāng)有一個(gè)線程拿到了鎖,另一個(gè)就阻塞在外面知道鎖的釋放,當(dāng)線程A實(shí)例化完成并釋放鎖后,B進(jìn)來(lái)發(fā)現(xiàn)instace不等于空了,就不會(huì)再去實(shí)例化了。

到此這篇關(guān)于Java設(shè)計(jì)模式之單例模式簡(jiǎn)析的文章就介紹到這了,更多相關(guān)Java單例模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springmvc4+hibernate4分頁(yè)查詢功能實(shí)現(xiàn)

    springmvc4+hibernate4分頁(yè)查詢功能實(shí)現(xiàn)

    本篇文章主要介紹了springmvc4+hibernate4分頁(yè)查詢功能實(shí)現(xiàn),Springmvc+hibernate成為現(xiàn)在很多人用的框架整合,有興趣的可以了解一下。
    2017-01-01
  • Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼

    Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼

    這篇文章主要介紹了Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼,需要的朋友可以參考下
    2020-10-10
  • SpringBoot零基礎(chǔ)入門之基本操作與概念

    SpringBoot零基礎(chǔ)入門之基本操作與概念

    這篇文章主要介紹了SpringBoot的概念、創(chuàng)建和運(yùn)行,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 一文帶你真正理解Java中的內(nèi)部類

    一文帶你真正理解Java中的內(nèi)部類

    不知道大家在平時(shí)的開發(fā)過程中或者源碼里是否留意過內(nèi)部類,那有思考過為什么要有內(nèi)部類,內(nèi)部類都有哪幾種形式,本篇文章主要帶領(lǐng)大家理解下這塊內(nèi)容
    2022-08-08
  • SpringBoot詳解執(zhí)行過程

    SpringBoot詳解執(zhí)行過程

    這篇文章主要介紹了SpringBoot的執(zhí)行過程原理,Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Java9版本新特性同一個(gè)Jar支持多JDK版本運(yùn)行

    Java9版本新特性同一個(gè)Jar支持多JDK版本運(yùn)行

    這篇文章主要為大家介紹了Java9新版本的特性之同一個(gè)Jar支持多JDK版本運(yùn)行的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • 淺談JSONObject的使用及示例代碼(JSON解析)

    淺談JSONObject的使用及示例代碼(JSON解析)

    這篇文章主要介紹了淺談JSONObject的使用及示例代碼(JSON解析),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 解決線程池中ThreadGroup的坑

    解決線程池中ThreadGroup的坑

    這篇文章主要介紹了解決線程池中ThreadGroup的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Mybatis核心組成部分之SQL映射文件揭秘詳解

    Mybatis核心組成部分之SQL映射文件揭秘詳解

    MyBatis真正的力量是在映射語(yǔ)句中,下面這篇文章主要給大家介紹了關(guān)于Mybatis核心組成部分之SQL映射文件揭秘的相關(guān)資料,現(xiàn)在分享給大家,給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-11-11
  • Java排序算法之選擇排序代碼實(shí)例

    Java排序算法之選擇排序代碼實(shí)例

    這篇文章主要介紹了Java排序算法之選擇排序代碼實(shí)例,從數(shù)組的第一個(gè)元素開始,每次遍歷數(shù)組找出一個(gè)最小值放在最左側(cè),第二次從第二個(gè)元素開始,依次類推,直到起始元素為數(shù)組的倒數(shù)第二個(gè)元素時(shí),直接和最后一個(gè)元素比較,較小值放左邊,完成排序,需要的朋友可以參考下
    2023-11-11

最新評(píng)論