16. Java: Thread-Safe Singleton (DCL)
JavaInicjalizacja leniwa z podwójnym sprawdzaniem blokady w środowisku wielowątkowym.
public class SecureSingleton {
private static volatile SecureSingleton instance;
private SecureSingleton() {}
public static SecureSingleton getInstance() {
if (instance == null) {
synchronized (SecureSingleton.class) {
if (instance == null) {
instance = new SecureSingleton();
}
}
}
return instance;
}
}
Kiedy używać
Stosuj, gdy potrzebujesz dokładnie jednej instancji obiektu współdzielonej między wątkami (np. pula połączeń, konfiguracja).
Typowe pułapki
Double-checked locking wymaga słowa kluczowego volatile przy polu instance — bez niego można otrzymać częściowo zainicjalizowany obiekt.