Sobes.tech
Junior — Middle
114

Qanday qilib ikki oqim bir vaqtning o'zida nolga teng bo'lgan volatile o'zgaruvchini oshirayotgan sharoitda 2000 qiymatini qaytarilishini ta'minlash mumkin?

Qaerda so'ralgan kompaniyalar
Драйв Клик

AIdan javob

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