亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java設(shè)計優(yōu)化之單例模式

 更新時間:2016年03月06日 16:32:27   作者:ngulc  
這篇文章主要為大家詳細介紹了java設(shè)計優(yōu)化中的單例模式,深入學(xué)習(xí)java單例模式,感興趣的朋友可以參考一下

單例模式是一種對象創(chuàng)建模式,確保系統(tǒng)中一個類只有一個實例。

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

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

2.由于new操作的次數(shù)減少,對于系統(tǒng)內(nèi)存的使用頻率降低,這樣減少GC的壓力,縮短GC停頓的時間。

單例模式細分:

1.

public class Singleton{
  private Singleton(){
    System.out.println("Singleton.Singleton()");
  }
  
  private static Singleton singleton = new Singleton();
  
  public static Singleton getInstance(){
    return singleton;
  }
}

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

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

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.為了提高相關(guān)函數(shù)的調(diào)用速度,就需要引入懶加載機制。

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;
  }
}

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

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

3.單例模式使用內(nèi)部類來維護單例的創(chuàng)建

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被加載時,內(nèi)部類不會被實例化,確保StaticSingleton類被載入jvm時,不會被初始化單例類,而當(dāng)getInstance()方法被調(diào)用時,才加載SingletonHolder,從而初始化instance。同時用于實例的建立在類加載時完成,故天生對線程友好。

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

以上就是本文的全部內(nèi)容希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 使用idea開發(fā)Servlet詳細圖文教程

    使用idea開發(fā)Servlet詳細圖文教程

    這篇文章主要給大家介紹了關(guān)于使用idea開發(fā)Servlet的相關(guān)資料,將idea添加servlet的過程其實非常簡單,只需要按照以下幾個步驟即可完成,需要的朋友可以參考下
    2023-10-10
  • springboot多數(shù)據(jù)源使用@Qualifier自動注入無效的解決

    springboot多數(shù)據(jù)源使用@Qualifier自動注入無效的解決

    這篇文章主要介紹了springboot多數(shù)據(jù)源使用@Qualifier自動注入無效的解決,具有很好的參考價值,希望對大家有所幫助。也希望大家多多支持腳本之家
    2021-11-11
  • springboot連接不同數(shù)據(jù)庫的寫法詳解

    springboot連接不同數(shù)據(jù)庫的寫法詳解

    這篇文章主要介紹了springboot連接不同數(shù)據(jù)庫的寫法?,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • SpringBoot整合Netty實現(xiàn)WebSocket的示例代碼

    SpringBoot整合Netty實現(xiàn)WebSocket的示例代碼

    本文主要介紹了SpringBoot整合Netty實現(xiàn)WebSocket的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • SpringBoot中的Mybatis依賴問題

    SpringBoot中的Mybatis依賴問題

    這篇文章主要介紹了SpringBoot中的Mybatis依賴問題,包括pom導(dǎo)入依賴和相關(guān)實例代碼講解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • java和jsp中的request使用示例

    java和jsp中的request使用示例

    這篇文章主要介紹了java和jsp中的request使用示例,需要的朋友可以參考下
    2014-02-02
  • 在已經(jīng)使用mybatis的項目里引入mybatis-plus,結(jié)果不能共存的解決

    在已經(jīng)使用mybatis的項目里引入mybatis-plus,結(jié)果不能共存的解決

    這篇文章主要介紹了在已經(jīng)使用mybatis的項目里引入mybatis-plus,結(jié)果不能共存的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)

    詳解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)

    這篇文章主要介紹了詳解JAVAEE——SSH三大框架整合(spring+struts2+hibernate),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java中Process類的使用與注意事項說明

    Java中Process類的使用與注意事項說明

    這篇文章主要介紹了Java中Process類的使用與注意事項說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring框架實現(xiàn)依賴注入的原理

    Spring框架實現(xiàn)依賴注入的原理

    依賴注入是由“依賴”和“注入”兩個詞匯組合而成,那么我們再一次順藤摸瓜,分別分析這兩個詞語,這篇文章主要介紹了Spring DI依賴注入詳解,需要的朋友可以參考下
    2023-04-04

最新評論