Singleton carregado com preguiçoso: bloqueio com verificação dupla versus idioma do titular da demanda por inicialização

Tenho um requisito para carregar recursos preguiçosamente em um ambiente simultâneo. O código para carregar os recursos deve ser executado apenas uma vez.

Ambos Bloqueio verificado duas vezes (usando JRE 5+ e a palavra-chave volátil) e Inicialização no idioma do detentor da demanda parece se encaixar bem no trabalh

Apenas olhando o código, o idioma do detentor de inicialização sob demanda parece mais limpo e mais eficiente (mas, ei, acho que aqui). Ainda assim, terei que cuidar e documentar o padrão em cada um dos meus Singletons. Pelo menos para mim, seria difícil entender por que o código foi escrito assim no local ...

Minha pergunta aqui é: Qual abordagem é melhor? E porque? Se sua resposta for nenhuma. Como você abordaria esse requisito em um ambiente Java S

Alternativa

Posso usar o CDI para isso sem impor seu uso em todo o meu projeto? Existem artigos por aí?

questionAnswers(5)

yourAnswerToTheQuestion