Sobes.tech
Junior — Middle

Эки поток бир убакта нөлгө барабар volatile өзгөрмөнү көбөйтүп жаткан шарттарда 2000 маанисин кайтарууну кантип камсыз кылса болот?

sobes.tech AI

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 предпочтительнее для производительности и простоты.