设计模式之单例模式

原创 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();
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式学习之单例模式

  • 2013年12月11日 21:43
  • 5KB
  • 下载

23钟设计模式之单例模式

  • 2013年08月13日 10:41
  • 26KB
  • 下载

php设计模式之———单例模式

单例模式单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案,例如数据库资源,就可...

设计模式之单例模式程序

  • 2010年05月18日 10:28
  • 3KB
  • 下载

java设计模式之单例模式详解

  • 2012年11月02日 17:53
  • 33KB
  • 下载

设计模式系列之一单例模式

Java实现不考虑线程安全的写法public class Singleton { private static Singleton uniqueInstance; private Sin...

设计模式单例模式

  • 2014年10月10日 20:56
  • 4KB
  • 下载

java设计模式 -- 单例模式

原文地址简书地址 在介绍单例模式之前,我们先了解一下,什么是设计模式? 设计模式(Design Pattern):是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。 目的:使用...

设计模式之单例模式

  • 2012年04月10日 17:38
  • 728B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之单例模式
举报原因:
原因补充:

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