Sobes.tech
Назад к вопросам
Junior — Middle
66

Какие потенциальные опасности связаны с одновременным изменением и чтением статической переменной типа int из разных потоков?

Компании, где спрашивали
Передовые Платежные Решения

Ответ от нейросети

sobes.tech AI

Одновременное чтение и изменение статической переменной типа int из разных потоков без синхронизации может привести к нескольким проблемам:

  • Гонка данных (Race condition): если один поток записывает значение, а другой читает, то чтение может произойти в момент, когда переменная находится в промежуточном состоянии.
  • Отсутствие атомарности: операция записи int в Java обычно атомарна, но если переменная не объявлена как volatile или не защищена синхронизацией, то изменения могут не быть видны другим потокам из-за кэширования.
  • Непредсказуемое поведение: из-за отсутствия гарантии видимости и порядка операций, разные потоки могут видеть устаревшие или частично обновленные значения.

Чтобы избежать этих проблем, следует использовать ключевое слово volatile для переменной или применять механизмы синхронизации (synchronized, AtomicInteger).

Пример с AtomicInteger:

import java.util.concurrent.atomic.AtomicInteger;

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

    public static void increment() {
        count.incrementAndGet();
    }

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