双重检查创建单例
package jess;
import jess.day04.Singleton;
/**
* @author Jess
* @date 2021/9/30
*/
public class Singleton4 {
// volatile 防止指令重排 造成不完整的单例对象
private static volatile Singleton4 INSTANCE;
private Singleton4() {
}
public Singleton4 getInstance() {
// 检查是否已经创建 不让所有线程都去抢锁
if (INSTANCE == null) {
// 一个线程进入
synchronized (Singleton.class) {
// 为了只让一个线程去创建
if (INSTANCE == null) {
INSTANCE = new Singleton4();
}
return INSTANCE;
}
}
return INSTANCE;
}
}