線程安全的單例模式的幾種實現


單例模式是常見的設計模式之一:目的是節省內存,限制了實例的個數;有利於java GC回收機制。

  

  單例模式的三個好處:

    1.控制資源的使用,通過線程同步來控制資源的並發訪問

    2.控制實例的產生個數,來達到節約資源的目的

    3.作為通信媒介使用,在不建立連接的情況下,讓兩個不先關的進程和線程之間實現通信

 

單例模式分類: 餓漢模式(在類加載時便會創建對象);

        懶漢模式(在外部第一次請求實例時才會創建實例);

        登記式模式

 

單例模式特點:

    1.單例類只有一個實例

    2.單例類必須自己創建自己唯一的實例

    3.單例類必須自己給其他類提供這一實例

 

1.懶漢模式:類加載時不會初始化,當外部第一次請求實例時才會創建實例;而且第一次創建后不在創建該實例;

    特點是:運行時獲取對象的速度比較慢,但加載的時候比較快,它在整個生命的應用周期只占用一部分資源

 

//單例模式-懶漢式單例
public class LazySingleton {
     //私有靜態對象,加載時候不做初始化
     private static LazySingleton jjy=null;
     // 私有構造方法,避免外部創建實例
     private LazySingleton(){}

     /**
      * 靜態工廠方法,返回此類的唯一實例. 
      * 當發現實例沒有初始化的時候,才初始化.
      * @return LazySingleton
      */
     synchronized public static LazySingleton getJjy(){
         if(jjy==null){
             jjy=new LazySingleton();
         }
         return jjy;
     }
}

2.餓漢模式:類加載時就會初始化,創建實例;

      特點是:運行時獲取對象速度比較快,但加載時速度比較慢,會一直占用資源  (程序打開加載比較慢,但運行速度快---從用戶體驗角度來說推薦餓漢)

//單例模式-餓漢式單例
public class EagerSingleton {
//私有靜態對象,加載時候不做初始化
private static EagerSingleton jjy=new EagerSingleton();
// 私有構造方法,避免外部創建實例
private EagerSingleton(){}

/**
* 靜態工廠方法,返回此類的唯一實例.

*
*/
synchronized public static EagerSingleton getJjy(){

return jjy;
}
}

 

 

 使用場景:數據庫連接池;網站計數器;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM