J. Bloch nel suo Java efficace suggerisce di utilizzare un'implementazione singleton basata su enum. Per esempio:Implementazione di singleton enum-based
public enum Application {
INSTANCE;
//methods, fields
}
Questa implementazione è bello in caso di serializzazione perché enumerazioni ci forniscono la capacità di serializzazione di default (e noi non devono avere paura di avere due istanze diverse durante la deserializzazione dell'oggetto) .
La mia domanda è come questa implementazione rispetta il multhreading. Come renderlo thread-safe? Cosa otterremmo probabilmente se provassimo ad accedervi da diversi thread?
Lo si rende thread-safe mentre si crea qualsiasi altro thread-safe: accertandosi che l'accesso al suo stato sia correttamente sincronizzato. Se non ha stato, è intrinsecamente thread-safe. –
Il vantaggio di enum è che è inizializzato su thread-safe. Un altro modello singleton richiede che una classe interiore ottenga lo stesso risultato e sia più verboso/magico. –