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

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

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

設(shè)計(jì)模式中的單例,是最常用,也算是比較簡(jiǎn)單的一個(gè)了。我們都知道,要想保證只有一個(gè)實(shí)例,通常采用加鎖和雙重檢查的方式來(lái)實(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;
  }
}

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

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

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

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é)

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

相關(guān)文章

  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性

    Spring 框架 4 支持 Java 8 語(yǔ)言和 API 功能。在本文中,我們將重點(diǎn)放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表達(dá)式,方法引用,JSR-310的日期和時(shí)間,和可重復(fù)注釋。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • 基于Springboot實(shí)現(xiàn)定時(shí)發(fā)送郵件功能

    基于Springboot實(shí)現(xiàn)定時(shí)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了基于Springboot實(shí)現(xiàn)定時(shí)發(fā)送郵件功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • java藍(lán)橋杯歷年真題及答案整理(小結(jié))

    java藍(lán)橋杯歷年真題及答案整理(小結(jié))

    這篇文章主要介紹了java藍(lán)橋杯歷年真題及答案整理(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • hashset去除重復(fù)值原理實(shí)例解析

    hashset去除重復(fù)值原理實(shí)例解析

    這篇文章主要介紹了hashset去除重復(fù)值原理實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • SpringMVC訪問(wèn)controller報(bào)錯(cuò)404的解決辦法(總結(jié)超詳細(xì))

    SpringMVC訪問(wèn)controller報(bào)錯(cuò)404的解決辦法(總結(jié)超詳細(xì))

    純注解配置SpringMVC程序,使用tomcat8.5.95版本啟動(dòng),能啟動(dòng)成功并且訪問(wèn)index.jsp頁(yè)面,但是訪問(wèn)/save時(shí)出現(xiàn)404無(wú)法訪問(wèn),本文給大家介紹了SpringMVC訪問(wèn)controller報(bào)錯(cuò)404的解決辦法,文章總結(jié)的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • IntellJ IDEA神器使用技巧(小結(jié))

    IntellJ IDEA神器使用技巧(小結(jié))

    這篇文章主要介紹了IntellJ IDEA神器使用技巧(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Springboot啟動(dòng)停止命令的.sh腳本編寫(xiě)方式

    Springboot啟動(dòng)停止命令的.sh腳本編寫(xiě)方式

    這篇文章主要介紹了Springboot啟動(dòng)停止命令的.sh腳本編寫(xiě)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • springboot?如何添加webapp文件夾

    springboot?如何添加webapp文件夾

    這篇文章主要介紹了springboot?如何添加webapp文件夾,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java開(kāi)發(fā)中常用記錄

    Java開(kāi)發(fā)中常用記錄

    這篇文章主要介紹了Java-編程式事務(wù)、Java-Stream、Linux常用命令,需要的朋友可以參考下
    2023-05-05
  • java web中使用cookie記住用戶的賬號(hào)和密碼

    java web中使用cookie記住用戶的賬號(hào)和密碼

    這篇文章主要介紹了java web中使用cookie記住用戶的賬號(hào)和密碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評(píng)論