package com.abin.lee.collection.singleton;
/**
* 双重检查加锁 单例模式
* @author abin
* 这个单例模式写法可以大大减少getInstance的时间消耗!
*/
public class SingletonOne {
/**
* volatile关键词确保:当singleton变量被初始化成SingletonOne实例时,多个线程正确地处理singleton变量
*/
private volatile static SingletonOne singleton=null;
public SingletonOne(){}
public static SingletonOne getInstance(){
if(null==singleton){//检查实例,如果不存在就进入同步区块
synchronized (SingletonOne.class) {//注意,只有第一次才彻底执行这里的代码
if(null!=singleton){
singleton=new SingletonOne();
}
}
}
return singleton;
}
}
package com.abin.lee.collection.singleton;
public class SingletonTwo {
/**
* volatile关键词确保:当uniqueInstance变量被初始化成Singleton实例时,
* 多个线程正确地处理uniqueInstance变量
*/
private volatile static SingletonTwo singleton = new SingletonTwo();
private SingletonTwo() {
}
public static SingletonTwo getInstance() {
return singleton;
}
}