Junior — Middle
Kas on olnud juhtumeid, kus olete kokku puutunud süsteemides protsesside vastastikuses lukustamises?
sobes.tech AI
Vastus AI-lt
Jah, vastastikune lukustus (deadlock) on olukord, kus kaks või rohkem protsessi või niiti ootavad lõpmatuseni, kuni teised vabastavad ressursid.
Java-s võib see juhtuda valesti kasutades sünkroniseerimist, näiteks kui kaks niiti püüavad saada kaks monitori objekti erinevas järjekorras.
Näide:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// töö
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// töö
}
}
});
t1.start();
t2.start();
Deadlock-i vältimiseks on oluline järgida lukustuste saamise järjekorda ja minimeerida ressursside hoidmise aega.