Назад к вопросам
Middle
5
Что такое deadlock?
Компании, где спрашивали
Senior Soft
Ответ от нейросети
sobes.tech AI
Deadlock (взаимная блокировка) — ситуация в многопоточных или многопроцессных системах, когда два или более процесса (или потока) находятся в состоянии ожидания ресурсов, занятых друг другом, и ни один из них не может продолжить работу.
Пример:
- Поток A захватил ресурс 1 и ждёт ресурс 2.
- Поток B захватил ресурс 2 и ждёт ресурс 1.
Оба потока блокированы навсегда, так как каждый ждёт освобождения ресурса, который удерживает другой.
В Java deadlock часто возникает при неправильном порядке захвата нескольких синхронизированных блокировок (synchronized).
Пример кода с deadlock:
public class DeadlockDemo {
private final Object lock1 = new Object();
private final Object lock2 = new Object();
public void method1() {
synchronized(lock1) {
// ...
synchronized(lock2) {
// ...
}
}
}
public void method2() {
synchronized(lock2) {
// ...
synchronized(lock1) {
// ...
}
}
}
}
Здесь если два потока вызовут method1 и method2 одновременно, может возникнуть deadlock.
Для предотвращения deadlock важно соблюдать порядок захвата ресурсов и использовать таймауты или другие механизмы синхронизации.