设计模式之单例模式

原创 2016年05月30日 19:22:55

单例模式概要

  • 单例的线程安全性( 懒加载会产生线程安全性)
  • 单例加载,是否懒加载(使用时才生成对象)
  • 以下只讨论懒加载

线程安全的解决

  • 线程的不安全性在于singleInstance==null 的判断,如果两个线程同时执行这步,就会产生两个对象,破坏了单例。
public class SingleInstance {
    private static SingleInstance singleInstance;
    private SingleInstance() {
    }
    public static SingleInstance get(){
        if(singleInstance==null){
            singleInstance=new SingleInstance();
        }
        return singleInstance;
    }
}
  • 低效率锁
    public static synchronized SingleInstance get(){
        if(singleInstance==null){
            singleInstance=new SingleInstance();
        }
        return singleInstance;
    }
  • 常用的dcl 双检测锁。省略了在mInstance!=null时的同步。
    如果希望更安全可以,使用volatile 关键字。
    public static  SingleInstance get(){
        if(singleInstance==null) {
            synchronized (SingleInstance.class){
                if (singleInstance == null) {
                    singleInstance = new SingleInstance();
                }
            }
        }
        return singleInstance;
    }
  • 静态内部类单例模式,第一次加载Singleton 类时不会加载SingleetonHodler 类,第一次调用getInstance 方法会导致虚拟机加载SingletonHolder 类。 虚拟机能够保证线程安全。
public class Singleton {
    private Singleton(){}
    public static Singleton getInstance(){
        return  SingletonHolder.sInstance;
    }
    private static class SingletonHolder{
        private static final Singleton sInstance =new Singleton();
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式——单例模式(1)

上三篇文章都是在讲工厂模式,这篇就跟吉哥一起学习最常用的模式——单例模式。   概念:在它的核心结构中只包含一个被称为单例的特殊类。   分类:单例模式的形式也比较多,包涵以下8种(这里是把懒...

研磨设计模式之单例模式

  • 2012-03-02 10:34
  • 311KB
  • 下载

设计模式之---单例模式

单列模式是设计模式中最为简单,也经常使用的一种。其主要特点是: 单列只有一个,对象不会被重复创建单列类必须自己创建自己的唯一实例单列类必须给其他所有客户端提供唯一的实例构造子是私有的,从而保...

设计模式单例模式

设计模式--单例模式(Singleton)

单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化对个对象,一个最好的办法就是让类自身负责保存它的唯一实例,这个类可以保...
  • jtmai
  • jtmai
  • 2011-07-05 22:51
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)