您的位置:首页 > 其它

双重检查加锁,实现单例模式

2016-09-16 23:54 323 查看
/*
*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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息