Sobes.tech
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. Sem volatile, as alterações podem permanecer na cache da thread, sem sincronização com a memória principal.
  • Não atômico: volatile nã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 com volatile.

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();
    }
}