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

溫馨提示×

溫馨提示×

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

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

java單例五種實現模式解析

發布時間:2020-09-19 00:25:25 來源:腳本之家 閱讀:156 作者:技術-劉騰飛 欄目:編程語言

餓漢式(線程安全,調用效率高,但是不能延時加載)

一上來就把單例對象創建出來了,要用的時候直接返回即可,這種可以說是單例模式中最簡單的一種實現方式。但是問題也比較明顯。單例在還沒有使用到的時候,初始化就已經完成了。也就是說,如果程序從頭到位都沒用使用這個單例的話,單例的對象還是會創建。這就造成了不必要的資源浪費。所以不推薦這種實現方式。

public class ImageLoader{ 
   private static ImageLoader instance = new ImageLoader; 
   private ImageLoader(){} 
   public static ImageLoader getInstance(){ 
     return instance; 
   } 
}

懶漢式(線程安全,調用效率不高,但是能延時加載)

public class SingletonDemo2 {   
  //類初始化時,不初始化這個對象(延時加載,真正用的時候再創建)
  private static SingletonDemo2 instance;  
  //構造器私有化
  private SingletonDemo2(){}   
  //方法同步,調用效率低
  public static synchronized SingletonDemo2 getInstance(){
    if(instance==null){
      instance=new SingletonDemo2();
    }
    return instance;
  }
}

靜態內部類實現模式(線程安全,調用效率高,可以延時加載)

可以看到使用這種方式我們沒有顯式的進行任何同步操作,那他是如何保證線程安全呢?和餓漢模式一樣,是靠JVM保證類的靜態成員只能被加載一次的特點,這樣就從JVM層面保證了只會有一個實例對象。

那么問題來了,這種方式和餓漢模式又有什么區別呢?不也是立即加載么?實則不然,加載一個類時,其內部類不會同時被加載。一個類被加載,當且僅當其某個靜態成員(靜態域、構造器、靜態方法等)被調用時發生。

但是在遇到序列化對象時,默認的方式運行得到的結果就是多例的。這種情況不多做說明了,使用時請注意。

 public class SingletonDemo3 {   
   private static class SingletonClassInstance{
     private static final SingletonDemo3 instance=new SingletonDemo3();
   }   
   private SingletonDemo3(){}   
   public static SingletonDemo3 getInstance(){
     return SingletonClassInstance.instance;
   }   
 }

枚舉類(線程安全,調用效率高,不能延時加載,可以天然的防止反射和反序列化調用)

 public enum SingletonDemo4 {   
   //枚舉元素本身就是單例
   INSTANCE;   
   //添加自己需要的操作
   public void singletonOperation(){   
   }
 }

Double CheckLock實現單例:DCL也就是雙重鎖判斷機制(由于JVM底層模型原因,偶爾會出問題,不建議使用)

選用

單例對象 占用資源少,不需要延時加載,枚舉 好于 餓漢

單例對象 占用資源多,需要延時加載,靜態內部類 好于 懶漢式

注意線程安全問題

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

重庆市| 亚东县| 新河县| 韶山市| 临洮县| 普兰县| 资源县| 盘锦市| 北流市| 海丰县| 景东| 兰考县| 农安县| 镇原县| 监利县| 新和县| 建昌县| 寻乌县| 雷州市| 威远县| 鄯善县| 长治市| 大石桥市| 虎林市| 双城市| 铜山县| 翁牛特旗| 泰来县| 赤峰市| 定日县| 汨罗市| 西乌珠穆沁旗| 木里| 开阳县| 濉溪县| 武邑县| 资讯| 梁河县| 宁化县| 门源| 清镇市|