Concurrency Avanzado

Inicialización perezosa con seguridad entre hilos sin volatile ni synchronized.

✕ 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.
🧹

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
Valores estables
Preview

Preview en JDK 25 (JEP 502). Requiere --enable-preview.

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.

Compartir 𝕏 🦋 in