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.