Junior — Middle
96
Каким образом обеспечить возвращение значения 2000 в условиях, когда два потока одновременно увеличивают volatile переменную, изначально равную нулю?
Сұралған компаниялар
Драйв Клик
AI-дан жауап
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 предпочтительнее для производительности и простоты.