/**
* 懒汉模式,饱汉式
* @author 冒云龙
* @date 2017年4月17日 下午8:28:34
* @describe
*/
//多线程会出现问题,可以在方法上加synchronized,但会大大影响性能
public class Singleton {
private static Singleton uniqueSingleton;//利用一个静态变量来记录Singleton的唯一实例
private Singleton(){//把构造器声明为私有的,只有Singleton类内才能调用构造器
}
public static Singleton getInstance(){//可以通过类名调用
if(uniqueSingleton==null){//用getInstance()去实例化对象,并返回这个实例
uniqueSingleton= new Singleton();
}//如果实例不存在就会创建,不需要这个实例就永远不会创建(延迟实例化)
return uniqueSingleton;
}
//这里是其他方法
}
/**
* 饿汉模式,静态初始化时就创建了,保证了线程安全
* @author 冒云龙
* @date 2017年4月17日 下午8:28:34
* @describe
*/
public class Singleton {
private Singleton(){
}
private static Singleton uniqueSingleton = new Singleton();
public static Singleton getInstance(){
return uniqueSingleton;
}
}
/**
* 懒汉模式,双重检查枷锁
* @author 冒云龙
* @date 2017年4月17日 下午8:28:34
* @describe
*/
public class Singleton {
private volatile static Singleton unqiueInstance;//voiatile关键字确保,当uniqueInstance被初始化成Singleton实例时,多个线程正确的处理unqiueInstance
private Singleton(){
}
public static Singleton getInstance(){
if(unqiueInstance==null){//检查实例,如果不存在就进入同步区
synchronized (Singleton.class) {//只有第一次才彻底执行这一块的代码
if(unqiueInstance==null){//再检查一次,如果仍是null,才创建
unqiueInstance = new Singleton();
}
}
}
return unqiueInstance;
}
}