// 在类加载时不创建单例对象 // 在第一次获取单例对象时才创建对象 // 存在线程安全问题
public class WindowDamo {
static WindowDamo windowDamo;
// 构造方法私有化
private WindowDamo() {
}
public static WindowDamo getWindow() {
if (windowDamo == null) {
windowDamo = new WindowDamo();
}
return windowDamo;
}
}
// 给方法加锁,虽然能解决线程安全问题,但并发访问效率低,一次只能有一个线程进入
public class WindowDamo {
static WindowDamo windowDamo;
// 构造方法私有化
private WindowDamo() {
}
public static synchronized WindowDamo getWindow() {
if (windowDamo == null) {
windowDamo = new WindowDamo();
}
return windowDamo;
}
}
// 标准答案 // 双重检索 + volatile
public class WindowDamo {
static volatile WindowDamo windowDamo;
// 构造方法私有化
private WindowDamo() {
}
// 双重检索 + volatile
public static WindowDamo getWindow() {
if (windowDamo == null) {
synchronized (WindowDamo.class) {
if (windowDamo == null) {
windowDamo = new WindowDamo();
}
}
}
return windowDamo;
}
}