Junior — Middle
Előfordultak olyan esetek, amikor kölcsönös folyamatblokkolásokkal szembesült rendszerekben?
sobes.tech MI
Válasz az MI-től
Igen, az egymásra utaló zárolás (deadlock) olyan helyzet, amikor két vagy több folyamat vagy szál örökké várja egymástól a források felszabadítását.
Java-ban ez akkor fordulhat elő, ha helytelenül használjuk a szinkronizációt, például amikor két szál két monitor objektumot próbál meg különböző sorrendben megszerezni.
Példa:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// munka
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// munka
}
}
});
t1.start();
t2.start();
A deadlock elkerülése érdekében fontos betartani a zárolások megszerzésének sorrendjét, és minimalizálni a források tartási idejét.