Spring -11 -單例設計模式 -懶漢式/餓漢式(idea默認的)


單例設計模式

  1. 作用: 在應用程序有保證最多只能有一個實例.
  2. 好處:

  2.1 提升運行效率.

  2.2 實現數據共享. 案例:application 對象

    1. 懶漢式

  3.1 對象只有被調用時才去創建.

  3.2  示例代碼

       3.3由於添加了鎖,所以導致效率低.

public class lazySingleton {  //懶漢式,單例模式!
    //由於對象需要被靜態方法調用,把方法設置為static
    //由於對象是static,必須要設置訪問權限修飾符為private ,
//如果是public 可以直接調用對象,不執行訪問入口
    private static lazySingleton ourInstance ;
 /**
    *方法名和類名相同,無返回值.
    *其他類不能實例化這個類對象;對外提供訪問入口
    */

    private lazySingleton() {
    }
/**

*實例方法,實例方法必須通過對象調用

*設置方法為靜態方法
*@return 一個上面的static 對象

*/
    public static lazySingleton getInstance() {
    //添加邏輯如果實例化過,直接返回
        if(ourInstance==null){
         /*
         * 多線程訪問下,可能出現if 同時成立的情況,添加鎖;
          監控這個類下創建一個鎖,每次只允許一個class進入;
         */
            synchronized (lazySingleton.class){
                if(ourInstance==null){ //雙重驗證
                    ourInstance =new lazySingleton();
                }
            }
        }
        return ourInstance;
    }
   
}

3.4 測試

  

        lazySingleton singleton = lazySingleton.getInstance();
        lazySingleton singleton1 = lazySingleton.getInstance();
        System.out.println(singleton==singleton1);
        System.out.println(singleton);
        System.out.println(singleton1);

--------------------
true
com.test.lazySingleton@60e53b93
com.test.lazySingleton@60e53b93

 

4.餓漢式  (IDEA 編譯器默認的singleTon)
  解決了懶漢式中多線程訪問可能出現同一個對象和效率低問題 ,多個實例共用一個對象!

public class hungerSingleton {
    private static hungerSingleton ourInstance = new hungerSingleton();

    public static hungerSingleton getInstance() {
        return ourInstance;
    }

    private hungerSingleton() {
    }
}

 


免責聲明!

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



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