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