Valores estáveis
Inicialização lazy thread-safe sem volatile ou synchronized.
Comparação 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();
}
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
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
Suporte JDK
Valores estáveis
Preview
Preview no JDK 25 (JEP 502). Requer --enable-preview.
Como funciona
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.
Documentação Relacionada