Middle+
O que é a palavra-chave volatile em Java e como ela é usada?
sobes.tech IA
Resposta da IA
volatile garante a visibilidade das alterações de uma variável para todas as threads.
- Garantia de visibilidade: Quando uma thread altera uma variável
volatile, outras threads garantem ver essa alteração. Semvolatile, as alterações podem permanecer na cache da thread, sem sincronização com a memória principal. - Não atômico:
volatilenão garante a atomicidade das operações. Operações como incremento (i++) não são atômicas e podem levar a condições de corrida mesmo comvolatile.
Usado para:
- Flags de estado: Quando uma thread define uma flag para informar às outras threads sobre algum estado.
- Operações simples de leitura/escrita: Quando as operações na variável consistem em uma única escrita por uma thread e múltiplas leituras por outras.
Exemplo de uso com uma flag:
// Exemplo de uso de volatile para uma flag de término
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Trabalho da thread
System.out.println("A thread está em execução...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Thread finalizada.");
}).start();
}
public void stop() {
terminated = true; // Alteração na variável volatile
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}