标签:
主旨
确保在整个程序生命周期内,某类型实例最多只有一个
适用场景
某系统可以创建多个打印任务,但同一时刻只支持执行一个打印任务
特点
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
分类
常用的单例模式分为饿汉式和懒汉式两种
1、饿汉模式
public class Singleton{
private static Singleton _instance=new Singleton();
private Singleton(){};
public static Singleton getInstance(){
return _instance;
}
}
由于jvm在创建Singleton类时候,同时也创建了一个静态的Singleton实例,所以该模式天生就是线程安全的
2、懒汉模式(双重检查锁定)
public class Singleton{
private static Singleton _instance;
private Singleton(){}
public Singleton getInstance(){
if(_instance==null){
synchronized(Singleton.class){
if(_instance==null){
_instance=new Singleton();
}
}
}
return _instance;
}
}
由于该模式为了确保线程安全使用了synchronized效率降低了,但同时在使用synchronized之前多加一层判断,一定层度屏蔽synchronized的执行
3、懒汉模式(静态内部类)
public class Singleton {
private static class LazyLoader {
private static final Singleton instance = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return LazyLoader.instance;
}
}
由于静态内部类LazyLoader的instance成员只有在第一次调用的时候才会被实例化
标签:
原文地址:http://www.cnblogs.com/xiongweidotnet/p/5582653.html