Sobes.tech
Junior — Middle

Wat zijn de potentiële gevaren verbonden aan het gelijktijdig wijzigen en lezen van een statische variabele van het type int uit verschillende threads?

sobes.tech AI

Antwoord van 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();
    }
}