Junior — Middle
Au fost cazuri în care v-ați confruntat cu blocaje reciproce ale proceselor în sisteme?
sobes.tech AI
Răspuns de la AI
Da, blocarea mutuală (deadlock) este o situație în care două sau mai multe procese sau fire de execuție așteaptă indefinit eliberarea resurselor unul de către celălalt.
În Java, acest lucru se poate întâmpla din cauza utilizării incorecte a sincronizării, de exemplu, atunci când două fire încearcă să obțină două obiecte monitor în ordine diferită.
Exemplu:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// lucru
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// lucru
}
}
});
t1.start();
t2.start();
Pentru a evita deadlock-ul, este important să se respecte o ordine în obținerea blocărilor și să se minimizeze timpul de retenție a resurselor.