Junior — Middle
Milyen módszerekkel lehet megelőzni a versenyhelyzeteket több szálas környezetben?
sobes.tech MI
Válasz az MI-től
A versenyhelyzet (race condition) elkerülése érdekében több szálas környezetben a következő módszereket alkalmazzák:
- Szinchronizáció (synchronized) — kritikus kód szekciók zárolása, hogy csak egy szál hajthassa végre őket egyszerre.
- A java.util.concurrent osztályok használata — például,
ReentrantLock,AtomicInteger,ConcurrentHashMap. - Közös állapot elkerülése — szálbiztos adatszerkezetek tervezése vagy változatlan objektumok használata.
- volatile használata — a változók változásainak láthatóságának biztosítása a szálak között.
Synchronized példával:
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
Ebben a példában az increment és getCount metódusok szinkronizáltak, hogy elkerüljék a párhuzamos hozzáférést és a versenyhelyzetet.