<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Never give up!

    如果說軟件開發是一條布滿荊棘的坎坷之路,那么我會每天在這道路兩旁書上“火焰舞者,到此一游!”。

     

    單例模式

    設計模式學過差不多也有一年了  可到現在只記得零星的幾個 看來是有必要復習一遍了。
    有些大的對象其實我們只需要一個,比如說:線程池、緩存、日志對,充當打印機、顯卡等設備的驅動程序的對象等,這類對象只能有一個實例,如果制造出多個就會產生許多問題。
    單件模式確保一個類只能有一個實例,并且提供一個全局的訪問點。

    public class Singleton {

        
    private static Singleton instance = null;
        
        
    private Singleton () { }
        
        
    public static Singleton getInstance() {
            
    if (instance == null) {
                instance 
    = new Singleton();
            }
            
            
    return instance;
        }

    }

    初看起來這段代碼沒有一點問題,但如果發生多線程的情況呢?因為多線程的不確定性,就很有可能產生很多個Singleton實例了。再來改善下讓它能夠適應多線程,如下:

    public class Singleton {

        
    private static Singleton instance = null;
        
        
    private Singleton () {}
        
        
    public static synchronized Singleton getInstance() {
            
    if (instance == null) {
                instance 
    = new Singleton();
            }
            
            
    return instance;
        }

    }

    這樣做多線程的問題是消除了,但卻產生另外的問題:以后每次訪問都需要執行同步方法,產生了嚴重的性能問題。再來改善下多線程,如下:

    1、使用急切創建實例,而不使用延遲加載
    public class Singleton {

        
    private static Singleton instance = new Singleton();
        
        
    private Singleton () {}
        
        
    public static  Singleton getInstance() {
            
    return instance;
        }

    }
    現在我們依賴JVM在加載這個類時馬上創建此類的單件實例,JVM保證在任何線程訪問instance靜態變量之前先創建此實例。

    2、使用雙重檢查加鎖,在getInstance中減少使用同步
    public class Singleton {

        
    // volatile 有效的確保當instance被初始化成實例時,多線程正確的處理instance變量。
        private volatile static  Singleton instance = null;
        
        
    private Singleton () {}
        
        
    public static  Singleton getInstance() {
            
            
    // 如果實例不存在就進入實例塊,只有第一次才徹底執行這里的代碼。
            if (instance == null) {
                
    // 這里有效的阻止了多線程問題的產生
                synchronized (Singleton.class) {
                    
    // 進入區塊后,再檢查一次,只有實例為空才創建實例。
                    if (instance == null) {
                        instance
    = new Singleton();
                    }
                }
            }
            
            
    return instance;
        }

    }

    posted on 2009-02-27 23:47 永遠的火焰舞者 閱讀(183) 評論(0)  編輯  收藏 所屬分類: designing pattern


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(10)

    隨筆檔案(9)

    文章檔案(1)

    搜索

    最新評論

    • 1.?re: JForum安裝
    • 我就是想研究下sso,哈哈!再在JForum的基礎上二次開發玩玩 呵呵
    • --Jlg
    • 2.?re: JForum安裝
    • JForum的代碼還比較清晰,但談不上強大,雖然一般也足夠用了。
    • --一農

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人午夜亚洲精品无码网站| 亚洲电影在线免费观看| 成年美女黄网站18禁免费| 亚洲短视频男人的影院| 特黄aa级毛片免费视频播放| 在线观看av永久免费| 亚洲视频免费在线观看| a级毛片免费观看视频| 国产无遮挡吃胸膜奶免费看视频| 亚洲国产品综合人成综合网站| 大地影院MV在线观看视频免费 | 成人亚洲综合天堂| 亚洲AV无码成人网站在线观看| 福利免费观看午夜体检区| 亚洲春色另类小说| 57PAO成人国产永久免费视频| 亚洲黄色一级毛片| 免费h片在线观看网址最新| 亚洲天堂中文字幕在线观看| 国产精品久久免费| 亚洲av日韩av永久无码电影| 国产男女猛烈无遮挡免费网站| 牛牛在线精品免费视频观看| 国产精品亚洲w码日韩中文| 国内精品免费视频精选在线观看 | 亚洲国产高清人在线| 久久国产乱子伦精品免费不卡| 亚洲人成片在线观看| 国产三级电影免费观看| 在线免费播放一级毛片| 亚洲一区二区三区免费在线观看| 黄网址在线永久免费观看| 国产精品免费一区二区三区| 亚洲AV日韩AV天堂久久| 无码高潮少妇毛多水多水免费 | 中文字幕无线码中文字幕免费| 亚洲AV无码专区国产乱码电影| 国产免费不卡视频| 中国一级全黄的免费观看| 亚洲中文字幕久在线| 亚洲精品成人久久久|