Sobes.tech
Junior — Middle

Como é que a leitura de uma variável a partir da memória partilhada pelos threads é realizada?

sobes.tech IA

Resposta da IA

No Java, a leitura de uma variável da memória compartilhada por threads ocorre considerando o Modelo de Memória Java (Java Memory Model). Cada thread pode ter uma cópia local da variável no cache do processador, portanto, para garantir a leitura do valor atual da memória compartilhada, é necessário considerar a sincronização.

Se a variável for declarada com a palavra-chave volatile, a leitura e escrita dessa variável ocorrem diretamente na memória principal, garantindo a visibilidade das mudanças entre threads sem sincronização adicional.

Se volatile não for usado, para uma leitura correta da variável da memória compartilhada, deve-se usar blocos sincronizados (synchronized), que garantem a coerência da memória e a visibilidade das mudanças entre threads.

Exemplo com volatile:

volatile int sharedVar;

// Em uma thread
sharedVar = 10;

// Em outra thread
int copiaLocal = sharedVar; // verá garantido o valor atualizado

Sem volatile ou synchronized, uma thread pode ver um valor desatualizado da variável devido ao cache.