Concurrency Avançado

Inicialização lazy thread-safe sem volatile ou 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();
}
Viu um problema com este código? Nos avise.
🧹

Zero boilerplate

Sem volatile, synchronized ou verificações de null.

Otimizado pela JVM

A JVM pode consolidar o valor após a inicialização.

🛡️

Garantia de execução única

O supplier executa exatamente uma vez, mesmo sob contenção.

Abordagem Antiga
Double-Checked Locking
Abordagem Moderna
StableValue
Desde o JDK
25
Dificuldade
Avançado
Valores estáveis
Preview

Preview no JDK 25 (JEP 502). Requer --enable-preview.

StableValue fornece um valor inicializado de forma lazy, imutável e com segurança de threads integrada. Sem double-checked locking, sem campos volatile, sem blocos synchronized. A JVM pode até otimizar o caminho de leitura após a inicialização.

Compartilhar 𝕏 🦋 in