Singleton con carga perezosa: bloqueo de doble verificación versus inicialización en idioma del titular de la demanda

Tengo el requisito de cargar con pereza los recursos en un entorno concurrente. El código para cargar los recursos debe ejecutarse solo una vez.

Ambos Bloqueo doblemente verificado (usando JRE 5+ y la palabra clave volátil) yInicialización en idioma del titular de la demanda parece encajar bien en el trabajo.

Solo mirando el código, el idioma del titular de la inicialización bajo demanda parece más limpio y más eficiente (pero bueno, supongo que aquí). Aún así, tendré que cuidar y documentar el patrón en cada uno de mis Singletons. Al menos para mí, sería difícil entender por qué el código se escribió así en el acto ...

Mi pregunta aquí es: ¿Qué enfoque es mejor? ¿Y por qué? Si tu respuesta es ninguna. ¿Cómo abordaría este requisito en un entorno Java SE?

Alternativa

¿Puedo usar CDI para esto sin imponer su uso en todo mi proyecto? ¿Algún artículo por ahí?

Respuestas a la pregunta(5)

Su respuesta a la pregunta