Почему нам нужно добавлять изменчивые данные в поле, чтобы предотвратить получение неверных данных? Разве мы не можем сделать то же самое, добавив синхронизацию в объявление метода, а не в блок кода?
public class LazySingleton {
private static volatile LazySingleton instance;
private LazySingleton() {
}
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
и
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {
}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
Подробнее здесь: https://stackoverflow.com/questions/767 ... zed-method