Impressionante isso aqui:
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
Eh um problema que pode acontecer inumeras vezes.
Se voce tem um singleton, e no getInstance() voce ve se ele eh null, instancia ele, voce pode isntancias duas vezes o singleton, e ficar soh com a referencia do ultimo. E eu nunca sincronizava os getInstances dos meus singletons. alias, nunca vi ninguem sincronizar.
Sincronizando resolve, porem gasta muito tempo para pegar o lock. Ele tenta resolver soh sincronizando a parte da instanciacao, mas mostra direitinho que tambem nao funciona, voce pode ter serios problemas de concorrencia, ja que a isntancia pode estar no MEIO da chamada ao construtor…
incrivel nao?