Sobes.tech
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.