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

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

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

    隨筆-95  評論-31  文章-10  trackbacks-0
     1/**
     2 * @author lx
     3 * 線程不安全的單例,試想兩個線程都進入了if(singleton==null)塊里這個時候會初始化兩個對象,這只在第一次調(diào)用的時候會產(chǎn)生
     4 */

     5public class Unsafe_singleton {
     6
     7    private static Unsafe_singleton singleton;
     8
     9    private Unsafe_singleton() {
    10    }

    11
    12    public static Unsafe_singleton getInstance() {
    13        if (singleton == null{
    14            singleton = new Unsafe_singleton();
    15        }

    16        return singleton;
    17    }

    18}

    19public class Safe_singleton {
    20     
    21    private static Safe_singleton singleton;
    22
    23    private Safe_singleton() {
    24    }

    25
    26    /**
    27     * 這種寫法,非常消耗性能,因為只是第一次進來的時候可能會產(chǎn)生多個實例的情況,后面多線程都不會再進行實例化,那么調(diào)用的時候會很降低性能
    28     * @return
    29     */

    30    public static synchronized Safe_singleton getInstance() {
    31        if (singleton == null{
    32            singleton = new Safe_singleton();
    33        }

    34        return singleton;
    35    }

    36}

    37/**
    38 * @author lx
    39 * 這種寫法如果在創(chuàng)建和運行時的負擔(dān)不太繁重,那么這種寫法也可以保證多線程安全,每個線程進來都會new 創(chuàng)建此實例。
    40 * 這種單例相對于每個線程來說確實是唯一的
    41 */

    42public class MoreSafe_singleton {
    43        
    44    private static MoreSafe_singleton singleton = new MoreSafe_singleton();
    45    
    46    public static MoreSafe_singleton getInstance(){
    47        return singleton;
    48    }

    49}

    50/**
    51 * @author lx
    52 * volatile 這個只在JDK1.5以上出現(xiàn) 它確保singleton變量被初始化時,多個線程正確地處理singleton變量
    53 * 這種寫法如果性能是關(guān)注的重點,那么可以大大減少getInstance()的時間消耗
    54 */

    55public class VerySafe_singleton {
    56     
    57    private volatile static VerySafe_singleton singleton;
    58    private VerySafe_singleton(){}
    59    
    60    public static VerySafe_singleton getInstance(){    
    61        if(singleton==null){
    62            synchronized(VerySafe_singleton.class){    
    63                if(singleton==null)//里面為何在加上判斷是否為空?
    64                    //因為試想如果有三個線程其中一個線程剛剛走出synchronized塊,這個時候又進來一個線程,
    65                    //如果不判斷是否為空,這個又會實例一個變量那么就不是單例了
    66                    singleton=new VerySafe_singleton();
    67                }

    68            }

    69        }

    70        return singleton;
    71    }

    72}
    posted on 2010-09-02 15:44 朔望魔刃 閱讀(368) 評論(1)  編輯  收藏 所屬分類: 設(shè)計模式&&數(shù)據(jù)結(jié)構(gòu)

    評論:
    # re: 再理解單例 2010-09-06 12:34 | xylz
    主站蜘蛛池模板: 日本免费中文字幕在线看| 亚洲福利电影在线观看| 亚洲日韩区在线电影| 色www免费视频| 皇色在线视频免费网站| 亚洲AV永久无码精品成人| 曰批免费视频播放在线看片二| 免费AA片少妇人AA片直播| 瑟瑟网站免费网站入口| 久久被窝电影亚洲爽爽爽| 国产精品免费一区二区三区| 哒哒哒免费视频观看在线www| 久久亚洲精品国产亚洲老地址| 99在线在线视频免费视频观看| 国产亚洲av片在线观看18女人| 美女黄频a美女大全免费皮| 亚洲AV无码欧洲AV无码网站| 免费毛片在线视频| 亚洲精品精华液一区二区| 成年在线网站免费观看无广告| 亚洲三级在线免费观看| 日韩在线免费视频| 一级一黄在线观看视频免费| 国产精品亚洲二区在线观看| XXX2高清在线观看免费视频| 亚洲精品无码永久中文字幕| 国产免费一区二区三区不卡| 国产亚洲精品精华液| 午夜成年女人毛片免费观看| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲AV无码一区东京热久久 | 一区免费在线观看| 国产亚洲人成A在线V网站| 免费国产作爱视频网站| 免费黄网站在线观看| 久久精品亚洲精品国产色婷| 欧洲精品成人免费视频在线观看| 国产精品亚洲一区二区无码| 免费女人18毛片a级毛片视频| 国产成人午夜精品免费视频| 亚洲日韩在线中文字幕综合 |