Sobes.tech
Middle

Quais são outras formas de lidar com a condição de corrida de threads, além de usar a palavra-chave volatile?

sobes.tech IA

Resposta da IA

Mutexes (blocos ou funções sincronizadas, API Lock), variáveis atômicas (AtomicInteger, AtomicBoolean, etc.), semáforos, monitores, canais (para transferência de dados entre threads), e uso de estruturas de dados seguras para acesso paralelo (por exemplo, ConcurrentHashMap, CopyOnWriteArrayList).

// Exemplo com bloco synchronized
private final Object lock = new Object();
private int count = 0;

public void increment() {
    synchronized (lock) {
        count++;
    }
}
// Exemplo com AtomicInteger
private final java.util.concurrent.atomic.AtomicInteger atomicCount = new java.util.concurrent.atomic.AtomicInteger(0);

public void incrementAtomic() {
    atomicCount.incrementAndGet();
}