双重检查加锁,实现单例模式
/**volatile关键词确保:当uniqueInstance变量被初始化为Singleton实例时,*多个线程正确的处理uniqueInstance变量(对于volatile修饰的变量,*jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的,volatile并不能*保证原子操作)**synchronized(Singleton.class)借助同步块,与volatile配合实
·
/*
*volatile关键词确保:当uniqueInstance变量被初始化为Singleton实例时,
*多个线程正确的处理uniqueInstance变量(对于volatile修饰的变量,
*jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的,volatile并不能
*保证原子操作)
*
*synchronized(Singleton.class)借助同步块,与volatile配合实现双重检查加锁,
*使用同步块的方法而不使用同步方法的好处是:只在第一次创建的时候才同步,避免
*了每次调用同步方法时的的消耗
*/
public class Singleton{
private volatile static Singleton uniqueInstance;
private Singleton(){}
public static Singleton getInstance(){
if (uniqueInstance == null) {
synchronized(Singleton.class){
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)