Ответ
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с таймаутом. - Минимизировать области синхронизации.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶