Middle — Middle+
148
O que acontece se realizar uma operação de incremento numa variável num ambiente multithread sem usar mecanismos de proteção contra condições de corrida?
Resposta da IA
sobes.tech IA
Если выполнить операцию инкремента (например, counter++ или counter += 1) над переменной в многопоточной среде без синхронизации, возможна гонка данных (race condition). Это происходит потому, что операция инкремента не является атомарной — она состоит из нескольких шагов (чтение значения, увеличение, запись обратно).
В результате:
- Несколько потоков могут одновременно прочитать одно и то же значение,
- Каждый увеличит его локально,
- Запишут обратно, перезаписывая изменения друг друга.
Это приведёт к тому, что итоговое значение переменной будет меньше ожидаемого, так как некоторые инкременты «потеряются».
Для предотвращения таких ошибок в Java используют механизмы синхронизации, например:
synchronizedблоки или методы,- классы из
java.util.concurrent.atomic(например,AtomicInteger), - другие примитивы блокировки (Lock).
Пример с AtomicInteger:
import java.util.concurrent.atomic.AtomicInteger;
public class Counter {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}
public int getCount() {
return count.get();
}
}