Я читаю о одиночках, и не понимаю, почему этоСамый эффективный одноэлементный узор?
public class BillPughSingleton {
private BillPughSingleton(){}
private static class SingletonHelper{
private static final BillPughSingleton INSTANCE = new BillPughSingleton();
}
public static BillPughSingleton getInstance(){
return SingletonHelper.INSTANCE;
}
}
является более эффективным, чем это
public static ThreadSafeSingleton getInstanceUsingDoubleLocking(){
if(instance == null){
synchronized (ThreadSafeSingleton.class) {
if(instance == null){
instance = new ThreadSafeSingleton();
}
}
}
return instance;
}
Не забывайте 'volatile', если вы используете блокировку с двойной проверкой. Начиная с java 1.5 дважды проверенные блокировки работают с 'volatile'. См. Https://en.wikipedia.org/wiki/Double-checked_locking –