Что такое DeadLock

«Что такое DeadLock» — вопрос из категории Многопоточность, который задают на 39% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DeadLock — это ситуация, когда два или более потока блокируют друг друга, ожидая освобождения ресурсов, занятых другим потоком. Это приводит к бесконечному ожиданию и зависанию приложения.

Пример:

val lock1 = Object()
val lock2 = Object()

Thread {
    synchronized(lock1) {
        Thread.sleep(100)
        synchronized(lock2) { /* DeadLock */ }
    }
}.start()

Thread {
    synchronized(lock2) {
        Thread.sleep(100)
        synchronized(lock1) { /* DeadLock */ }
    }
}.start()

Здесь потоки взаимно блокируют друг друга, так как каждый держит один ресурс и ждёт освобождения другого.

Как избежать:

  • Упорядочивать блокировки (например, всегда сначала lock1, потом lock2).
  • Использовать tryLock с таймаутом.
  • Минимизировать области синхронизации.

Видео-ответы