<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 永遠的火焰舞者 閱讀(182) 評論(0)  編輯  收藏 所屬分類: designing pattern


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


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(10)

    隨筆檔案(9)

    文章檔案(1)

    搜索

    最新評論

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

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲高清免费在线观看| 久久久青草青青亚洲国产免观| 免费黄色电影在线观看| 国产午夜亚洲精品不卡| 亚洲1区1区3区4区产品乱码芒果 | 亚洲av永久无码精品古装片| 午夜免费福利网站| 国产乱子精品免费视观看片| 人人揉揉香蕉大免费不卡| 一级毛片免费观看不收费| 亚洲欧美成人一区二区三区| 亚洲午夜电影一区二区三区| 午夜亚洲www湿好大| 久久亚洲高清综合| 又爽又黄无遮挡高清免费视频| 成年性生交大片免费看| 999国内精品永久免费视频| a级毛片免费全部播放| a一级爱做片免费| 深夜福利在线免费观看| 亚洲日韩在线中文字幕综合 | 免费v片在线观看视频网站| 免费播放一区二区三区| 暖暖在线视频免费视频| 免费看一区二区三区四区| 中文字幕的电影免费网站| 一个人看的hd免费视频| 西西人体大胆免费视频| 羞羞视频在线免费观看| 另类图片亚洲校园小说区| 亚洲国产成人久久精品软件 | 久久笫一福利免费导航| 国产成人精品免费视频大全麻豆| 精品一区二区三区免费毛片爱| 久久精品乱子伦免费| 一个人免费日韩不卡视频| 777爽死你无码免费看一二区| 日韩精品内射视频免费观看| 午夜免费1000部| 啦啦啦中文在线观看电视剧免费版 | www永久免费视频|