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

Java設計模式之單例模式簡析

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

什么是單例模式?

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

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

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

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

三種實現(xiàn)方式

1、懶漢式

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

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

2、餓漢式

先實例化出來,有人用就直接返回即可

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

3、加鎖的單例模式

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

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

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

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

相關文章

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

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

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

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

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

    SpringBoot零基礎入門之基本操作與概念

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

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

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

    SpringBoot詳解執(zhí)行過程

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

    Java9版本新特性同一個Jar支持多JDK版本運行

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

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

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

    解決線程池中ThreadGroup的坑

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

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

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

    Java排序算法之選擇排序代碼實例

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

最新評論