Implementação eficiente do padrão Singleton em Java
Olá a todos! Sou um desenvolvedor Java iniciante e estou estudando padrões de projeto. Cheguei no Singleton, mas me confundi na implementação.
Problema: preciso criar uma classe que garanta ter apenas uma instância em toda a aplicação. Escrevi uma versão simples com lazy initialization, mas ela não funciona corretamente em ambiente multithread. Aqui está meu código:
```java
public class ConfigManager {
private static ConfigManager instance;
private ConfigManager() {}
public static ConfigManager getInstance() {
if (instance == null) {
instance = new ConfigManager();
}
return instance;
}
}
```
Quando executo um teste com várias threads, às vezes várias instâncias são criadas. Li sobre synchronized, mas tenho medo de que isso afete muito a performance. Também vi versões com enum e bloco estático, mas não entendo qual delas é considerada "correta" e eficiente em aplicações modernas.
Diga-me como fazer corretamente.