Junior — Middle
Cosa succede quando più thread modificano contemporaneamente una variabile all'interno di un ciclo?
sobes.tech AI
Risposta dell'AI
Когда несколько потоков одновременно изменяют одну переменную внутри цикла без синхронизации, возникает состояние гонки (race condition). Это приводит к непредсказуемым результатам, так как операции чтения и записи могут пересекаться.
Например, если два потока одновременно увеличивают счетчик:
int counter = 0;
// В двух потоках выполняется:
counter = counter + 1;
Из-за того, что операция увеличения не атомарна (состоит из чтения, увеличения и записи), итоговое значение может быть меньше ожидаемого.
Чтобы избежать этого, нужно использовать механизмы синхронизации, например, ключевое слово synchronized или атомарные классы из java.util.concurrent.atomic:
AtomicInteger counter = new AtomicInteger(0);
// В потоках:
counter.incrementAndGet();
Это гарантирует корректное обновление переменной без потери данных.