Junior — Middle
Čo sa stane, keď viac vlákien súčasne mení premennú vnútri slučky?
sobes.tech AI
Odpoveď od AI
Keď niekoľko vlákien súčasne mení premennú v cykle bez synchronizácie, vzniká závodná podmienka (race condition). To vedie k nepredvídateľným výsledkom, pretože operácie čítania a zápisu sa môžu prekrývať.
Napríklad, ak dve vlákna súčasne zvyšujú čítač:
int counter = 0;
// V oboch vláknach:
counter = counter + 1;
Pretože operácia zvýšenia nie je atómová (skladá sa z čítania, zvýšenia a zápisu), konečná hodnota môže byť menšia ako očakávaná.
Aby sa tomu zabránilo, je potrebné použiť synchronizačné mechanizmy, ako je kľúčové slovo synchronized alebo atómové triedy z java.util.concurrent.atomic:
AtomicInteger counter = new AtomicInteger(0);
// Vo vláknach:
counter.incrementAndGet();
Toto zabezpečuje správnu aktualizáciu premennej bez straty dát.