一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java設計優化之單例模式

java設計優化之單例模式

2020-04-08 14:32ngulc JAVA教程

這篇文章主要為大家詳細介紹了java設計優化中的單例模式,深入學習java單例模式,感興趣的朋友可以參考一下

單例模式是一種對象創建模式,確保系統中一個類只有一個實例。

在java語言中,這樣做有兩大好處:

1.對于頻繁使用的對象,可以省略創建對象所話費的時間;

2.由于new操作的次數減少,對于系統內存的使用頻率降低,這樣減少GC的壓力,縮短GC停頓的時間。

單例模式細分:

1.

?
1
2
3
4
5
6
7
8
9
10
11
public class Singleton{
  private Singleton(){
    System.out.println("Singleton.Singleton()");
  }
  
  private static Singleton singleton = new Singleton();
  
  public static Singleton getInstance(){
    return singleton;
  }
}

注意:首先單例類必須有一個private訪問級別的構造函數,確保單例不會被系統其他代碼實例化;其次,singleton成員變量和getInstance()方法必須是static的。

這個單例類創建十分簡單,而且非常可靠。唯一的缺點是無法對singleton做延遲加載,例如由于單例創建過程很慢,由于成員變量定義為static,在jvm加載單例類時,單例對象也會被創建,那么在任何用到單例類的地方都會創建單例對象,不管單例對象是否被用到。例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Singleton{
  private Singleton(){
    System.out.println("Singleton.Singleton()");
  }
  
  private static Singleton singleton = new Singleton();
  
  public static Singleton getInstance(){
    return singleton;
  }
  
  public static void createString(){
    System.out.println("Singleton.createString()");
  }
}

2.為了提高相關函數的調用速度,就需要引入懶加載機制。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.luchao.singtonle;
 
public class LazySingleton {
  private LazySingleton() {
    System.out.println("LazySingleton.LazySingleton()");
  }
  private static LazySingleton lazyInstance = null;
  
  public synchronized static LazySingleton getInstance(){
    if(lazyInstance==null)
      lazyInstance = new LazySingleton();
    return lazyInstance;
  }
}

對于靜態變量singleton初始化賦值為null,確保系統啟動時沒有額外的負荷。在getInstance()方法中,判斷當前實例十分已經存在,如果存在則返回,如果不存在,再建單例。getInstance()必須為同步方法,因為在多線程環境下,當線程1正在建單例,未完成賦值前,線程2可能判斷instance為null,故線程2將啟動建立新建單例的程序,導致多個單例被創建。

上面實例單例實現,雖然實現了延遲加載,但是引入了同步方法,在多線程環境下,耗時遠大于第一個單例程序。

3.單例模式使用內部類來維護單例的創建

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class StaticSingleton {
  private StaticSingleton() {
    System.out.println("StaticSingleton.StaticSingleton()");
  }
  
  private static class SingletonHolder{
    private static StaticSingleton ataticSingleton = new     StaticSingleton();
  }
  
  public static StaticSingleton getInstance(){
    return SingletonHolder.ataticSingleton;
  }
  
}

StaticSingleton被加載時,內部類不會被實例化,確保StaticSingleton類被載入jvm時,不會被初始化單例類,而當getInstance()方法被調用時,才加載SingletonHolder,從而初始化instance。同時用于實例的建立在類加載時完成,故天生對線程友好。

使用內部類完成單利模式,既可以做到延遲加載,也不用使用同步關鍵字,是一種比較完善的做法。

以上就是本文的全部內容希望對大家的學習有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩免费在线视频观看 | 国产精品suv一区二区 | 果冻传媒天美传媒在线小视频播放 | 国产精品青青青高清在线密亚 | 国产一级持黄大片99久久 | 红杏劫| 毛片99| 四虎影视网站 | 麻豆视频入口 | 9999热视频 | 欧美18一19性高清hd4k | 国产趴着打光屁股sp抽打 | 日韩专区| 亚洲性爱区 | 天天爽天天干天天操 | 恩爱夫妇交换小说 | 色综合天天网 | 午夜神器18以下不能进免费 | 久久精品亚洲精品国产欧美 | 亚洲麻豆精品果冻传媒 | 亚洲麻豆精品 | 2021精品国夜夜天天拍拍 | 欧美操大逼视频 | 国色天香社区在线 | 日韩理论片在线看免费观看 | 91大片淫黄大片在线天堂 | 久久免费看少妇高潮A片特爽 | nhdta系列媚药系列 | 日本无卡无吗中文免费 | 男生同性啪视频在线观看 | 无删减影视免费观看 | 成人黄色a级片 | 朝鲜美女免费一级毛片 | 网站在线观看 | 深夜影院深a久久 | 91制片厂 果冻传媒 天美传媒 | 欧美一级视频在线高清观看 | 美女脱了内裤打开腿让人羞羞软件 | 日本欧美不卡一区二区三区在线 | 欧美精品国产第一区二区 | 咪咪爱在线视频 |