Junior — Middle
Имали ли сте случаи, когато сте се сблъсквали с взаимна блокировка на процеси в системи?
sobes.tech AI
Отговор от AI
Да, взаимната блокировка (deadlock) е ситуация, при която два или повече процеса или нишки завинаги чакат освобождаването на ресурси един от друг.
В Java това може да се случи при неправилна употреба на синхронизация, например когато два нишки се опитват да придобият два обекта-монитора в различен ред.
Пример:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// работа
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// работа
}
}
});
t1.start();
t2.start();
За да избегнете deadlock, е важно да спазвате реда на придобиване на блокировките и да минимизирате времето за задържане на ресурсите.