Java · Avançado · Inglês · Técnico
volatile
Modificador de campo que garante visibilidade entre threads e impede reordenação de leituras e escritas, mas não torna atômicas operações compostas como count++.
Onde usar
Aparece em flags de parada, como volatile boolean rodando, e no padrão double-checked locking. Em review: 'isso precisa de volatile'.
Em código
class Worker implements Runnable {
private volatile boolean rodando = true;
public void run() {
while (rodando) { /* trabalho */ }
}
void parar() { rodando = false; }
}Exemplos
Mark the stop flag volatile so the worker sees the change.
Marque a flag de parada como volatile para o worker ver a mudança.
Volatile doesn't make count++ atomic.
Volatile não torna o count++ atômico.
Cuidado
volatile não substitui synchronized: n++ continua sujeito a perda de atualizações. Serve para sinalizar estado simples.
Origem
Do latim volatilis, que voa, instável: o valor pode mudar a qualquer momento.