Sobes.tech
Junior — Middle

A utilização da palavra-chave volatile garante a incrementação correta do contador num ambiente multithread?

sobes.tech IA

Resposta da IA

A palavra-chave volatile em Java garante a visibilidade das alterações de uma variável entre threads, mas não garante a atomicidade das operações. A incremento de um contador (counter++) é uma operação composta (leitura, incremento, escrita) que não é atômica.

Portanto, usar volatile para um contador em um ambiente multithread não garante uma incremento correta e pode levar a perdas de atualizações.

Para uma incremento correta em um ambiente multithread, deve-se usar:

  • AtomicInteger do pacote java.util.concurrent.atomic:
import java.util.concurrent.atomic.AtomicInteger;

AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();
  • ou sincronização (synchronized) ao redor da operação de incremento.

Assim, volatile não é adequado para uma incremento correta de um contador em um ambiente multithread.