/*
*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;
	}
}


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐