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

Java正確實現(xiàn)一個單例設(shè)計模式的示例

 更新時間:2019年01月09日 09:51:48   作者:李燦輝  
今天小編就為大家分享一篇關(guān)于Java正確實現(xiàn)一個單例設(shè)計模式的示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

設(shè)計模式中的單例,是最常用,也算是比較簡單的一個了。我們都知道,要想保證只有一個實例,通常采用加鎖和雙重檢查的方式來實現(xiàn)單例,代碼如下。

public class SingletonTest {
  private SingletonTest(){
  }
  private static SingletonTest instance;
  public static SingletonTest getInstance(){
    if(instance == null){
      synchronized (SingletonTest.class){
        if(instance == null){
          instance = new SingletonTest();
        }
      }
    }
    return instance;
  }
}

這種寫法的要點主要有如下幾個,1,私有構(gòu)造函數(shù),即不允許直接調(diào)用構(gòu)造函數(shù)new一個對象。2,靜態(tài)實例。3,靜態(tài)獲取示例的方法。首先判斷instance是否為null,然后加鎖,然后再判斷instance是否為null,之后進行初始化。最后返回示例。

做到這些就足夠了嗎?并不是。

我們都知道,jvm的內(nèi)存模型,jvm中的線程有自己的工作內(nèi)存,jvm有主內(nèi)存,工作內(nèi)存是主內(nèi)存的拷貝,工作內(nèi)存和主內(nèi)存直接并不是實時一致的。一個線程創(chuàng)建了單例對象后,別的線程并不一定可以立刻感知到。所以,以上代碼中,instance還需要用volatile來修飾,才能真正做到單例模式。修改后的代碼如下。

public class SingletonTest {
  private SingletonTest(){
  }
  private static volatile SingletonTest instance;
  public static SingletonTest getInstance(){
    if(instance == null){
      synchronized (SingletonTest.class){
        if(instance == null){
          instance = new SingletonTest();
        }
      }
    }
    return instance;
  }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • datax-web在windows環(huán)境idea中模塊化打包部署操作步驟

    datax-web在windows環(huán)境idea中模塊化打包部署操作步驟

    這篇文章主要介紹了datax-web在windows環(huán)境idea中模塊化打包部署操作步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • Mybatis把返回結(jié)果封裝成map類型的實現(xiàn)

    Mybatis把返回結(jié)果封裝成map類型的實現(xiàn)

    本文主要介紹了Mybatis把返回結(jié)果封裝成map類型的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Java中volatile關(guān)鍵字實現(xiàn)原理

    Java中volatile關(guān)鍵字實現(xiàn)原理

    本文詳細解讀一下volatile關(guān)鍵字如何保證變量在多線程之間的可見性,對Java中volatile關(guān)鍵字實現(xiàn)原理感興趣的朋友一起通過本文學習吧
    2017-06-06
  • java 中設(shè)計模式(值對象)的實例詳解

    java 中設(shè)計模式(值對象)的實例詳解

    這篇文章主要介紹了java 中設(shè)計模式(值對象)的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Java Scala數(shù)據(jù)類型與變量常量及類和對象超詳細講解

    Java Scala數(shù)據(jù)類型與變量常量及類和對象超詳細講解

    本文內(nèi)容主要分為3節(jié),依次講解:Scala的數(shù)據(jù)類型有哪些? 變量常量如何使用? 類和對象如何理解? 受限于博主的大腦容量,大概是無法做到事無巨細的,不過其實也沒必要那么"細",抓住主要脈絡(luò),加上大量的練習,融會貫通只不過是時間的問題
    2022-12-12
  • Spring JPA聯(lián)表查詢之OneToOne源碼詳解

    Spring JPA聯(lián)表查詢之OneToOne源碼詳解

    這篇文章主要為大家介紹了Spring JPA聯(lián)表查詢之OneToOne源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • SpringBoot中的@RequestMapping注解的用法示例

    SpringBoot中的@RequestMapping注解的用法示例

    @RequestMapping注解是SpringBoot中最常用的注解之一,它可以幫助開發(fā)者定義和處理HTTP請求,本篇文章我們將詳細為大家介紹如何使用SpringBoot中的@RequestMapping注解,感興趣的同學跟著小編一起來學習吧
    2023-06-06
  • idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案

    idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案

    這篇文章主要介紹了idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 關(guān)于@JSONField和@JsonFormat的使用區(qū)別說明

    關(guān)于@JSONField和@JsonFormat的使用區(qū)別說明

    這篇文章主要介紹了關(guān)于@JSONField 和 @JsonFormat的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 關(guān)于最長遞增子序列問題概述

    關(guān)于最長遞增子序列問題概述

    本文詳細介紹了最長遞增子序列問題的定義及兩種優(yōu)化解法:貪心+二分查找和動態(tài)規(guī)劃+狀態(tài)壓縮,貪心+二分查找時間復(fù)雜度為O(nlogn),通過維護一個有序的“尾巴”數(shù)組來高效地找到最長遞增子序列,動態(tài)規(guī)劃+狀態(tài)壓縮則通過狀態(tài)壓縮將空間復(fù)雜度優(yōu)化至O(n)
    2025-02-02

最新評論

子洲县| 克拉玛依市| 乡城县| 仙游县| 博客| 安阳县| 当雄县| 邛崃市| 千阳县| 汉源县| 太谷县| 德清县| 凉山| 乐安县| 凉山| 呼图壁县| 抚松县| 乐亭县| 太谷县| 宣恩县| 公安县| 汉源县| 美姑县| 禄丰县| 睢宁县| 来宾市| 盈江县| 九龙坡区| 芮城县| 鄂尔多斯市| 名山县| 太和县| 诏安县| 青龙| 渭南市| 普陀区| 神农架林区| 山阴县| 锡林浩特市| 宣汉县| 八宿县|