Valores estables
Inicialización perezosa con seguridad entre hilos sin volatile ni synchronized.
Comparación de Código
✕ Java 8
private volatile Logger logger;
Logger getLogger() {
if (logger == null) {
synchronized (this) {
if (logger == null)
logger = createLogger();
}
}
return logger;
}
✓ Java 25 (Preview)
private final StableValue<Logger> logger =
StableValue.of(this::createLogger);
Logger getLogger() {
return logger.get();
}
¿Ves un problema con este código? Cuéntanos.
Por qué gana la forma moderna
Cero código repetitivo
Sin volatile, synchronized ni verificaciones de null.
Optimizado por la JVM
La JVM puede plegar el valor después de la inicialización.
Ejecución única garantizada
El proveedor se ejecuta exactamente una vez, incluso bajo contención.
Enfoque Antiguo
Double-Checked Locking
Enfoque Moderno
StableValue
Desde JDK
25
Dificultad
Avanzado
Soporte JDK
Valores estables
Preview
Preview en JDK 25 (JEP 502). Requiere --enable-preview.
Cómo funciona
StableValue proporciona un valor inicializado perezosamente e inmutable con seguridad entre hilos incorporada. Sin double-checked locking, sin campos volatile, sin bloques synchronized. La JVM incluso puede optimizar la ruta de lectura después de la inicialización.
Documentación Relacionada