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

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

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

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

java設計模式之單例模式學習

2019-10-30 17:07java教程網 JAVA教程

單例對象(Singleton)是一種常用的設計模式。在Java應用中,單例對象能保證在一個JVM中,該對象只有一個實例存在

1 概述

單例模式有幾個好處:

(1)某些類創建比較頻繁,對于一些大型的對象,這是一筆很大的系統開銷。

(2)省去了new操作符,降低了系統內存的使用頻率,減輕GC壓力。

(3)有些類如交易所的核心交易引擎,控制著交易流程,如果該類可以創建多個的話,系統完全亂了。

2 詳解

單例模式常用的寫法有如下這么兩種。

2.1 餓漢式

如果應用程序總是創建并使用單例模式,或者在創建和運行時壓力不是很大的情況下,可以使用一個私有靜態變量,提前把對象創建好。

 

復制代碼代碼如下:

package org.scott.singleton;
/** 
 * @author Scott
 * @version 2013-11-16 
 * @description
 */
public class Singleton1 {
    private static Singleton1 uniqueInstance = new Singleton1();

    private Singleton1(){

    }

    public static Singleton1 getInstance(){
        return uniqueInstance;
    }
}

 

這樣做的話,當JVM加載這個類的時候,根據初始化的順序,就已經把對象創建好了。同時,JVM可以保證任何線程在訪問這個單例對象之前,一定先創建此實例,并且只創建一次。

當然,也可以使用一個靜態內部類來完成同樣的功能。

 

復制代碼代碼如下:

package org.scott.singleton;
/** 
 * @author Scott
 * @version 2013-11-16 
 * @description
 */
public class Singleton2 {  

    private Singleton2() {  
    }  

    /** 
     * 此處使用一個內部類來維護單例 
     * */  
    private static class SingletonFactory {  
        private static Singleton2 instance = new Singleton2();  
    }  

    public static Singleton2 getInstance() {  
        return SingletonFactory.instance;  
    }  

    /**
     * 如果該對象被用于序列化,可以保證對象在序列化前后保持一致 
     * */  
    public Object readResolve() {  
        return getInstance();  
    }  
}

 

2.2 雙重鎖方式
 “雙重鎖”,顧名思義就是兩把鎖,第一把鎖用來檢查要創建的實例對象是否已經創建了,如果尚未創建才使用第二把鎖來進行同步。

 

復制代碼代碼如下:

package org.scott.singleton;
/** 
 * @author Scott
 * @version 2013-11-16 
 * @description
 */
public class Singleton3 {
    private volatile static Singleton3 uniqueInstance;

    private Singleton3(){

    }

    public static Singleton3 getInstance(){
        if(uniqueInstance == null){
            synchronized(Singleton3.class){
                if(uniqueInstance == null){
                    uniqueInstance = new Singleton3();
                }
            }
        }
        return uniqueInstance;
    }
}

 

如果對性能要求比較高的話,這種方式可以大大減少創建的時間,目前來說,這種方式也是比較通用的一種創建單例的方式。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人影院在线观看 | 毛片a区| 日本中文字幕在线观看视频 | 免费欧美一级 | 超逼网 | 午夜欧美精品久久久久久久久 | 国产愉拍精品视频手机 | 成人激情 | 美国艳星lisann成人作品 | 男人天堂2023| 国内剧情麻豆 | 91国内精品线免费播放 | chinese国产人妖videos | 俄罗斯女人与公拘i交酡 | 午夜伦理yy44008影院 | 国产日韩片 | beeg日本高清xxxx18 | 99在线观看视频 | chinese男gay飞机同志 | 九九精品国产亚洲A片无码 九九99热久久999精品 | jj免费视频 | 9966久久精品免费看国产 | 女性全身裸露无遮挡 | 暴露狂婷婷医院暴露tx | 国产精品成人网红女主播 | 4455永久在线观免费看片 | 涩涩漫画免费 | 亚洲国产欧美另类 | 四虎最新免费网址 | 精品国产自在现线久久 | 国产高清经典露脸3p | 含羞草国产亚洲精品岁国产精品 | 192.168.191| chinese野外gay军人| 午夜看片a福利在线观看 | 精品亚洲欧美中文字幕在线看 | 美女张开腿让男人桶的 视频 | hd在线观看免费高清视频 | 男女视频在线观看 | 青青草原伊人网 | 日本韩国无矿砖码 |