public class TestSingleton {
private TestSingleton() {
}
private static volatile TestSingleton instance = null;
public static TestSingleton getInstance() {
if (instance == null) {
synchronized (TestSingleton.class) {
if (instance == null) {
instance = new TestSingleton();
}
}
}
return instance;
}
}
看很多文章都说是volatile为了防止new TestSingleton()的指令重排序,可这段代码在synchronized代码块中,synchronized又完成可以替代volatile,所以为什么要加volatile呢??