I am getting confused which one should I use to make a synchronized singleton class object. I know below 2 ways of achieving it.
static volatile PaymentSettings paymentSettings = null;
public static PaymentSettings getInstance() {
    if (paymentSettings == null) {
        synchronized (PaymentSettings.class) {
            if (paymentSettings == null)
                paymentSettings = new PaymentSettings();
        }
    }
    return paymentSettings;
}
And
 private static class PaymentSettingsInstanceHolder {
    private static PaymentSettings instance = new PaymentSettings();
}
public static PaymentSettings getInstance() {
    return PaymentSettingsInstanceHolder.instance;
}
Please suggest which approach should I use and why?
 
     
    