Sobes.tech
Junior — Middle
98

¿Qué peligros potenciales están asociados con la modificación y lectura simultáneas de una variable estática de tipo int desde diferentes hilos?

Empresas donde se preguntó
Передовые Платежные Решения

Respuesta de la IA

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