单例模式(饿汉和饱汉)

原文地址:https://www.cnblogs.com/ylq1990/p/7898371.html 
参考文章:https://blog.csdn.net/android_cyw/article/details/75667926
public class Demo {
//    饿汉式 在类加载的时候已经初始化该对象

    static Demo demo = new Demo();

    private Demo(){

    }

    public static Demo getInstance(){
        return demo;
    }
   优:线程安全
缺:getInstance有可能不会被执行,占用资源

//    懒汉式 判断对象是否存在再创建对象

    static Demo demo ;

    private Demo(){

    }

    public static Demo getInstance(){
        if(demo == null){
            demo = new Demo();
        }

        return demo;
    }
    优:节省资源
缺:线程不安全

public class Demo {
//    懒汉式 (上锁)

    static Demo demo ;

    private Demo(){

    }

    public static Demo getInstance(){
        if(demo == null){
            synchronized (Demo.class){
                if(demo == null){

                    demo = new Demo();
                }
            }
        }

        return demo;
    }
    优:节省资源,线程安全
缺:第一次加载时反应不快,由于java内存模型一些原因偶尔失败

public class Demo {
//    懒汉式 (上锁)

    private Demo(){

    }

    private static  class DemoEx{
        static Demo demo = new Demo();
    }

    public static Demo getInstance(){
        return DemoEx.demo;
    }
    

}

优:节省资源,getInstance 不被调用 DemoEx类便不会被加载

缺:第一次加载时较慢

 
 
 
 
posted @ 2018-04-10 00:03  Kliver  阅读(429)  评论(0编辑  收藏  举报