この静的内部クラス実装の単一例は、遅いロードでスレッドが安全ですか?


public class JiveProperties {

    private static final String LOAD_PROPERTIES = "SELECT name, propValue FROM ofProperty";

    private JiveProperties() {
    	System.out.println("JiveProperties constructor");
    }
    
    static {
    	System.out.println("static block");
    }
    
    private static class JivePropertyHolder {
    	static {
            System.out.println("initing1");
        }
    	
    	private static final String LOAD_PROPERTIES = "Inner Static Class...";
    	
    	private JivePropertyHolder() {
    		System.out.println("inner class...");
    	}
    	
        private static final JiveProperties instance = new JiveProperties();
        
        static {
            System.out.println("initing2");
        }
    }

    public static JiveProperties getInstance() {
        return JivePropertyHolder.instance;
    }

    public static void main(String[] args) {
    	System.out.println(JiveProperties.JivePropertyHolder.LOAD_PROPERTIES);
	}
    
}

 
結果:
static block Inner Static Class...
 
従って、初歩的な判断は、遅いロードであり、スレッドが安全である(finalによって保証される)