Встречается на собеседованиях • сегодня

Какая проблема возникнет при использовании volatile счётчика, если несколько потоков параллельно увеличивают его значение

volatile гарантирует видимость изменений переменной для всех потоков, но не обеспечивает атомарность операций. При инкременте (counter++) происходит три операции: чтение, увеличение, запись. Между ними возможна race condition.

Пример:

java
private volatile int counter = 0;

// В нескольких потоках:
counter++; // Небезопасно!

Решение - использовать AtomicInteger или синхронизацию:

java
private final AtomicInteger counter = new AtomicInteger();

// Потокобезопасно:
counter.incrementAndGet();

Или с synchronized:

java
private int counter = 0;

public synchronized void increment() {
    counter++;
}
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы