Junior — Middle
107
¿Cómo garantizar el retorno del valor 2000 en condiciones en las que dos hilos aumentan simultáneamente una variable volatile inicialmente igual a cero?
Empresas donde se preguntó
Драйв Клик
Respuesta de la IA
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 предпочтительнее для производительности и простоты.