Junior — Middle
Mi történik, amikor több szál egyidejűleg módosít egy változót egy cikluson belül?
sobes.tech MI
Válasz az MI-től
Amikor több szál egyidejűleg módosít egy változót egy cikluson belül szinkronizáció nélkül, versenyhelyzet (race condition) alakul ki. Ez bizonytalan eredményekhez vezet, mivel az olvasási és írási műveletek átfedhetnek egymással.
Például, ha két szál egyszerre növeli a számlálót:
int counter = 0;
// Mindkét szálban:
counter = counter + 1;
Mivel a növelő művelet nem atomi (olvasásból, növelésből és írásból áll), a végső érték lehet kisebb a vártnál.
Ennek elkerülése érdekében szinkronizációs mechanizmusokat kell használni, például a synchronized kulcsszót vagy az java.util.concurrent.atomic atomikus osztályait:
AtomicInteger counter = new AtomicInteger(0);
// Szálakban:
counter.incrementAndGet();
Ez garantálja a változó helyes frissítését adatvesztés nélkül.