Middle — Middle+
128
Çok iş parçacıklı bir ortamda, yarış koşullarına karşı koruma mekanizmaları olmadan bir değişken üzerinde artış işlemi gerçekleştirirseniz ne olur?
AI'dan gelen yanıt
sobes.tech yapay zeka
Если выполнить операцию инкремента (например, 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();
}
}