91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java正確實現一個單例設計模式的示例

發布時間:2020-10-24 01:20:36 來源:腳本之家 閱讀:146 作者:李燦輝 欄目:編程語言

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

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,私有構造函數,即不允許直接調用構造函數new一個對象。2,靜態實例。3,靜態獲取示例的方法。首先判斷instance是否為null,然后加鎖,然后再判斷instance是否為null,之后進行初始化。最后返回示例。

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

我們都知道,jvm的內存模型,jvm中的線程有自己的工作內存,jvm有主內存,工作內存是主內存的拷貝,工作內存和主內存直接并不是實時一致的。一個線程創建了單例對象后,別的線程并不一定可以立刻感知到。所以,以上代碼中,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;
  }
}

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西藏| 旺苍县| 墨玉县| 桑日县| 河北省| 卢湾区| 肇州县| 延吉市| 黄山市| 吉木萨尔县| 宁南县| 卢湾区| 苗栗县| 逊克县| 湟源县| 望江县| 剑河县| 新巴尔虎右旗| 修武县| 安西县| 多伦县| 永德县| 乾安县| 石城县| 台山市| 昂仁县| 玉门市| 平利县| 兴义市| 桦川县| 永安市| 高邮市| 抚州市| 深泽县| 南涧| 青海省| 志丹县| 仙游县| 和龙市| 南京市| 稷山县|