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

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

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

    夢幻之旅

    DEBUG - 天道酬勤

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
    1.在何時使用:
       在某些情況下,我們只需要一個類只能實例化一個對象,在這種情況下,可以使用單件.
    2.uml類圖

    3.使用單例模式的好處.
       單類的唯一實例由單件類本控制的,所以可以很好地控制只有一個實現.
     使用Singleton的好處還在于可以節省內存因為它限制了實例的個數,有利于Java垃圾回收(garbage collection).

    4.例子
     1).餓漢式單件,
    /**
     * <ul>
     * <li>Title:[SingletomA]</li>
     * <li>Description: [單例]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-7-24]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
     * 
    @version 1.0
     
    */

    public class SingletomA
    {
        
    private static SingletomA singletom = new SingletomA();
        
        
    private SingletomA()
        
    {}
        
        
    public static SingletomA getInstance()
        
    {
            
    return singletom;
        }

    }


       2). 懶漢式單件
     
    /**
     * <ul>
     * <li>Title:[SingletomB]</li>
     * <li>Description: [懶漢式單態]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-7-24]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
    @version 1.0  
     
    */

    public class SingletomB
    {
        
        
    private static SingletomB singletom;
        
        
    private SingletomB()
        
    {}
        
        
    public static SingletomB getInstance()
        
    {
            
    if (singletom == null)
            
    {
                singletom 
    = new SingletomB();
            }

            
    return singletom;
        }

    }

         這個單例模式是不安全的,為什么說呢 ?因為沒考慮多線程,如下情況
         Thread 1 調用getInstance() 方法,并且判斷instance是null,然後進入if模塊,在實例化instance之前,Thread 2搶占了Thread 1的cpu。Thread 2 調用getInstance() 方法,并且判斷instance是null,然後進入if模塊,Thread 2 實例化instance 完成,返回Thread 1 再次實例化instance
            這個單例已經不在是單例
     
    3).線程安全式單態
       
    /**
     * <ul>
     * <li>Title:[SingletomB]</li>
     * <li>Description: [懶漢式單態]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-7-24]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
    @version 1.0  
     
    */

    public class SingletomB
    {
        
        
    private static SingletomB singletom;
        
        
    private SingletomB()
        
    {}
        
        
    public static synchronized SingletomB getInstance()
        
    {
            
    if (singletom == null)
            
    {
                singletom 
    = new SingletomB();
            }

            
    return singletom;
        }

    }
    采用同步來解決,這種方式解決了問題,但是仔細分析正常的情況下只有第一次時候,進入對象的實例化,須要同步,其它時候都是直接返回已經實例化好的instance不須要同步,大家都知到在一個多線程的程序中,如果同步的消耗是很大的,很容易造成瓶頸.

    4.改進型
    利用Double-checked locking 兩次同步,中間變量,解決上邊的問題。
    /**
     * <ul>
     * <li>Title:[SingletomB]</li>
     * <li>Description: [懶漢式單態]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-7-24]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
     * 
    @version 1.0
     
    */

    public class SingletomB
    {
        
        
    private static SingletomB singletom;
        
        
    private SingletomB()
        
    {}
        
        
    public static SingletomB getInstance()
        
    {
            
    if (singletom == null)
            
    {
                
    synchronized (SingletomB.class)
                
    {
                    
    if (singletom == null)
                        singletom 
    = new SingletomB();
                }

            }

            
    return singletom;
        }

    }
    posted on 2011-07-24 15:18 HUIKK 閱讀(233) 評論(0)  編輯  收藏 所屬分類: Design Patterns
    主站蜘蛛池模板: 一区二区在线视频免费观看| 国产成人精品免费视| 久久精品国产亚洲香蕉| av免费不卡国产观看| 亚洲JIZZJIZZ妇女| 亚洲熟女少妇一区二区| 亚洲美女视频免费| 国产91成人精品亚洲精品| 欧洲亚洲国产清在高| 最近2019中文字幕mv免费看| a级毛片免费观看网站| 亚洲成a人片在线观看播放| 国产成人免费a在线视频色戒| 中文字幕av无码不卡免费| 亚洲狠狠狠一区二区三区| 国产乱弄免费视频| 久久国产乱子免费精品| 精品国产亚洲AV麻豆| 亚洲一区二区三区四区在线观看| 免费无码不卡视频在线观看| 在线成人精品国产区免费| 亚洲Av永久无码精品黑人| 久久精品国产亚洲av麻豆| 亚洲电影日韩精品| 18禁止观看免费私人影院| 伊人免费在线观看| 亚洲丰满熟女一区二区哦| 久久亚洲中文字幕精品有坂深雪| 国产99视频精品免费视频7| 18女人腿打开无遮掩免费| 中文字幕在线免费视频| 欧美激情综合亚洲一二区| 亚洲国产午夜精品理论片| 亚洲人色婷婷成人网站在线观看| 精品免费国产一区二区三区| 2021精品国产品免费观看| a级毛片视频免费观看| 日韩免费高清一级毛片| 亚洲日韩精品无码AV海量| 亚洲理论片在线观看| 亚洲AV无码欧洲AV无码网站|