单例模式-基于headfirst设计模式的总结

2022-07-27,,

1.经典的单例模式——懒汉式

public class Singleton {
	private static Singleton uniqueInstance;
 
	private Singleton() {}
 
	public static Singleton getInstance() {
		if (uniqueInstance == null) {
			uniqueInstance = new Singleton();
		}
		return uniqueInstance;
	}
 
	// other useful methods here
}

主要的就是3步

1.创建静态私有变量

2.创建私有构造方法

3.创建静态方法返回对象

存在问题:线程不安全

2.饿汉式

public class Singleton {
	private static Singleton uniqueInstance = new Singleton();
 
	private Singleton() {}
 
	public static Singleton getInstance() {
		return uniqueInstance;
	}
}

线程安全,但是每次优先创建了对象消耗了多余的内存

3.加入同步代码块

public class Singleton {
	private static Singleton uniqueInstance;
 
	private Singleton() {}
 
	public static  synchronized Singleton getInstance() {
		if (uniqueInstance == null) {
			uniqueInstance = new Singleton();
		}
		return uniqueInstance;
	}
 
	// other useful methods here
}

影响了性能

4.双重检测法

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

用volatile来保证可见性

双重检测确保在对象为空的时候才创建对象,这样就可以减少每次对同步代码块的判断。

本文地址:https://blog.csdn.net/weixin_43484977/article/details/110261590

《单例模式-基于headfirst设计模式的总结.doc》

下载本文的Word格式文档,以方便收藏与打印。