Sobes.tech
Назад к вопросам
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 важно соблюдать порядок захвата ресурсов и использовать таймауты или другие механизмы синхронизации.