Junior — Middle
Stali sa prípady, keď ste sa stretli s vzájomným blokovaním procesov v systémoch?
sobes.tech AI
Odpoveď od AI
Áno, mŕtvy zámok (deadlock) je situácia, keď dva alebo viac procesov alebo vlákien navždy čakajú na uvoľnenie zdrojov od seba.
V Jave sa to môže stať nesprávnym použitím synchronizácie, napríklad keď dve vlákna sa pokúšajú získať dva monitorové objekty v odlišnom poradí.
Príklad:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// práca
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// práca
}
}
});
t1.start();
t2.start();
Aby ste predišli deadlocku, je dôležité dodržiavať poradie pri získavaní zámkov a minimalizovať dobu držania zdrojov.