码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-单例模式

时间:2018-02-23 19:06:58      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:ati   加载   优化   sync   懒汉   post   静态方法   饿汉   div   

懒汉式


/**
 * 懒汉式,线程不安全需要使用 synchronized做同步
 */
class Single{
    private static Single single = null;
    private Single(){

    }
    public static synchronized Single getInstance(){
        if(single == null){
            single = new Single();
        }
        return single;
    }

    //线程安全第二种方式
    public static  Single getInstance2(){
        //静态方法  因此不能使用this  a b c  每次并发调用都需要等待,因此效率不高
        synchronized (Single.class) {
            if (single == null) {
                single = new Single();
            }
        }
        return single;
    }

    //线程安全第二种方式优化
    public static  Single getInstance3(){
        //静态方法  因此不能使用this  a b c  每次并发调用都需要等待,因此效率不高
        if(single == null) {
            synchronized (Single.class) {
                if (single == null) {
                    single = new Single();
                }
            }
        }
        return single;
    }
}

饿汉式


/**
 * 饿汉式  线程安全
 */
class Single2{  //效率底下,当Single2.say()调用时那么single 就会被初始化,可以使用内部类来解决这个问题,因为类只有在调用的时候才会被加载
    private static Single2 single = new Single2();
    private Single2(){
    }
    public static  Single2 getInstance(){
        return single;
    }

    public static  String say(){
        return "....";
    }
}


/**
 * 饿汉式  线程安全 使用内部类优化
 */
class Single3{
    private static class SingleWrap{
        private static Single3 single = new Single3();
    }

    private Single3(){
    }
    //即使调用say single也不会被初始化
    public static  Single3 getInstance(){
        return SingleWrap.single;
    }
    public static  String say(){
        return "....";
    }
}

设计模式-单例模式

标签:ati   加载   优化   sync   懒汉   post   静态方法   饿汉   div   

原文地址:https://www.cnblogs.com/mf001/p/8462632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!