单例模式:保证一个类对象只实例化一个
如何实现单例模式:
- 私有构造方法
- 私有化实例对象
- 提供公共静态的获取对象的方法
饿汉式
饿汉式单例模式是天然的线程安全,在类加载时实例化对象
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
懒汉式
public class Singleton {
private static volatile Singleton instance; // volatile防止指令重排
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) { // 如果instance不为空,直接返回,无需再次加锁,提升效率
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}