饿汉模式
饿汉模式是线程安全的,不需要关键字来保证线程安全。
class Singleton {
// 期望 singleton 是一个单例, 也就是只有一个实例
private static final Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
private Singleton() {
}
}
懒汉模式
懒汉模式是线程不安全的,因此需要加
synchronized
和volatile
关键字修饰。
为什么要使用关键字修饰,可以参考我写的另一篇博客 懒汉设计模式使用 volatile 关键字和两个 if 判断的原因
class Singleton {
// 3. 加 volatile 关键字
volatile private static Singleton instance = null;
public static Singleton getInstance() {
// 2. 外层判断
if (instance == null) {
// 1. 内层加锁判断
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
private Singleton() {
}
}