Sobes.tech
Back to questions
Junior — Middle
67

Каким образом можно обеспечить безопасное обновление переменной, кода которой одновременно обращаются несколько потоков?

Companies where asked
ПСБ

Answer from AI

sobes.tech AI

Для безопасного обновления переменной, к которой одновременно обращаются несколько потоков, можно использовать несколько подходов:

  1. Синхронизация (synchronized) — блокировка критической секции кода, чтобы только один поток мог изменять переменную в момент времени.

  2. Классы из пакета java.util.concurrent.atomic — например, AtomicInteger, AtomicReference и др., которые обеспечивают атомарные операции без явной синхронизации.

  3. Использование volatile — гарантирует видимость изменений переменной между потоками, но не обеспечивает атомарность сложных операций.

  4. Lock (java.util.concurrent.locks.Lock) — более гибкий механизм блокировок.

Пример с AtomicInteger:

import java.util.concurrent.atomic.AtomicInteger;

public class Counter {
    private AtomicInteger count = new AtomicInteger(0);

    public void increment() {
        count.incrementAndGet(); // атомарное увеличение
    }

    public int getCount() {
        return count.get();
    }
}

Такой подход позволяет безопасно обновлять значение без риска состояния гонки.