Назад к вопросам
Junior — Middle
63
Каким образом обеспечить возвращение значения 2000 в условиях, когда два потока одновременно увеличивают volatile переменную, изначально равную нулю?
Компании, где спрашивали
Драйв Клик
Ответ от нейросети
sobes.tech AI
Переменная, объявленная как 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 предпочтительнее для производительности и простоты.