Каким образом можно искусственно вызвать состояние взаимной блокировки в системе?

В Android (и в общем в многопоточных системах) взаимная блокировка (deadlock) возникает, когда два или более потока навсегда ожидают освобождения ресурсов, занятых друг другом.

Короткий ответ

Что ответить на собеседовании

В Android (и в общем в многопоточных системах) взаимная блокировка (deadlock) возникает, когда два или более потока навсегда ожидают освобождения ресурсов, занятых друг другом.

Подробный разбор

Ответ с пояснениями

В Android (и в общем в многопоточных системах) взаимная блокировка (deadlock) возникает, когда два или более потока навсегда ожидают освобождения ресурсов, занятых друг другом.

Искусственно вызвать deadlock можно, если два потока захватывают два ресурса в разном порядке. Например:

final Object resource1 = new Object();
final Object resource2 = new Object();

Thread t1 = new Thread(() -> {
    synchronized (resource1) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized (resource2) {
            // работа с ресурсами
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized (resource2) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized (resource1) {
            // работа с ресурсами
        }
    }
});

t1.start();
t2.start();

Здесь t1 захватывает resource1, затем пытается захватить resource2, а t2 наоборот — сначала resource2, потом resource1. Если оба потока успеют захватить первый ресурс до того, как второй освободится, они навсегда заблокируются, ожидая друг друга.

Таким образом, чтобы искусственно вызвать deadlock, нужно:

  • Иметь минимум два ресурса (монитора)
  • Два потока, которые захватывают эти ресурсы в разном порядке
  • Добавить задержку для увеличения шанса одновременного захвата

Это классический пример взаимной блокировки.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку