<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:29 永遠的火焰舞者 閱讀(92) 評論(0)  編輯  收藏


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


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(10)

    隨筆檔案(9)

    文章檔案(1)

    搜索

    最新評論

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

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 我要看WWW免费看插插视频| 免费成人高清在线视频| 麻豆国产精品入口免费观看| 亚洲毛片在线免费观看| 久久久久久曰本AV免费免费| 亚洲第一精品电影网| 99久久99久久精品免费看蜜桃| 亚洲AV无码乱码麻豆精品国产| 德国女人一级毛片免费| 亚洲AV女人18毛片水真多| 亚洲福利精品一区二区三区| eeuss草民免费| 日韩亚洲人成在线综合日本| 男女午夜24式免费视频| 亚洲精品福利网站| 成人毛片免费观看视频在线 | 亚洲国产成人久久综合一 | 午夜性色一区二区三区免费不卡视频 | 免费亚洲视频在线观看| 亚洲国产成人影院播放| 国产特黄特色的大片观看免费视频| 久热综合在线亚洲精品| 国产一卡二卡四卡免费| 自拍偷自拍亚洲精品播放| 久久久久亚洲?V成人无码| 久久免费公开视频| 2020亚洲男人天堂精品| 亚洲国产小视频精品久久久三级| 国产成人免费AV在线播放 | 国产精品手机在线亚洲| 亚洲精品美女久久久久99| 九九精品免费视频| 美女露100%胸无遮挡免费观看| 精品国产亚洲一区二区三区| 91成人免费观看网站| 老司机午夜在线视频免费观| 亚洲国产国产综合一区首页| 国产精品无码免费播放| 你懂得的在线观看免费视频| 亚洲综合丁香婷婷六月香| 综合久久久久久中文字幕亚洲国产国产综合一区首|