Junior — Middle
Da li su se dešavali slučajevi kada ste se susretali sa međusobnim blokadama procesa u sistemima?
sobes.tech АИ
Одговор од АИ
Da, međuzavisno blokiranje (deadlock) je situacija u kojoj dva ili više procesa ili niti zauvek čekaju da se oslobode resursi od strane drugih.
U Javi, to se može dogoditi zbog nepravilne upotrebe sinhronizacije, na primer kada dve niti pokušavaju da steknu dva monitor objekta u različitom redosledu.
Primer:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// rad
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// rad
}
}
});
t1.start();
t2.start();
Da biste izbegli deadlock, važno je pridržavati se reda u sticanju blokada i minimizirati vreme zadržavanja resursa.