Sobes.tech
Junior — Middle

Como garantir o retorno do valor 2000 em condições onde dois threads aumentam simultaneamente uma variável volatile inicialmente igual a zero?

sobes.tech IA

Resposta da IA

Переменная, объявленная как volatile, гарантирует видимость изменений между потоками, но не обеспечивает атомарность операций. При одновременном увеличении переменной двумя потоками возможна потеря обновлений (race condition), и итоговое значение может быть меньше ожидаемого.

Чтобы гарантировать, что после двух одновременных инкрементов значение будет 2000, нужно использовать атомарные операции или синхронизацию.

В Java можно использовать класс AtomicInteger из пакета java.util.concurrent.atomic:

import java.util.concurrent.atomic.AtomicInteger;

public class Counter {
    private AtomicInteger count = new AtomicInteger(0);

    public void increment() {
        count.addAndGet(1000); // увеличиваем на 1000
    }

    public int getCount() {
        return count.get();
    }
}

Если два потока вызовут increment(), итоговое значение будет 2000 без потерь.

Альтернативно можно использовать синхронизированный метод:

private int count = 0;

public synchronized void increment() {
    count += 1000;
}

Но AtomicInteger предпочтительнее для производительности и простоты.