Sobes.tech
Junior — Middle
100

Milyen potenciális veszélyek kapcsolódnak az int típusú statikus változó egyidejű módosításához és olvasásához különböző szálakról?

Cégeket kérdeztek
Передовые Платежные Решения

Válasz az MI-től

sobes.tech MI

Одновременное чтение и изменение статической переменной типа 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();
    }
}