为什么下面这段代码是线程不安全的。
public class Singleton {
private static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) { ①
synchronized (Singleton.class) { ②
if (singleton == null) { ③
singleton = new Singleton(); ④
}
}
}
return singleton;
}
}
而下面这段代码singleton被volatile修饰后就是线程安全的
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) { ①
synchronized (Singleton.class) { ②
if (singleton == null) { ③
singleton = new Singleton(); ④
}
}
}
return singleton;
}
}
添加回答
举报
0/150
提交
取消