Sobes.tech
Junior — Middle

Como é que a ausência do uso da palavra-chave volatile afetará o comportamento do thread ao trabalhar com um objeto?

sobes.tech IA

Resposta da IA

Se não usar a palavra-chave volatile para uma variável que é usada por vários threads, as alterações nessa variável em um thread podem não ser visíveis para outros threads devido ao cache e otimizações do compilador. Isso pode fazer com que um thread trabalhe com um valor desatualizado da variável, causando problemas de sincronização e comportamento imprevisível do programa.

A palavra-chave volatile garante que a leitura e escrita da variável ocorram diretamente na memória principal, e não no cache local do thread, garantindo a visibilidade das alterações entre threads.

Exemplo:

class SharedData {
    // Sem volatile
    boolean flag = false;

    void writer() {
        flag = true; // a alteração pode não ser imediatamente visível para outros threads
    }

    void reader() {
        while (!flag) {
            // pode ficar em um loop infinito se flag não for atualizada devido à ausência de volatile
        }
        // continuar o trabalho
    }
}

Se flag for declarado como volatile boolean flag = false;, as alterações serão imediatamente visíveis para todos os threads.