Встречается на собеседованиях • сегодня

Какие знаешь способы решения Deadlock

Deadlock возникает, когда потоки блокируют друг друга, ожидая ресурсы. Основные способы решения:

  1. Избегание циклических ожиданий – зафиксировать порядок блокировки ресурсов. Например, всегда сначала блокировать ResourceA, затем ResourceB:
java
synchronized(resourceA) {
    synchronized(resourceB) {
        // работа с ресурсами
    }
}
  1. Timeout на блокировках – использовать tryLock() с таймаутом:
java
if (lock1.tryLock(100, TimeUnit.MILLISECONDS)) {
    try {
        if (lock2.tryLock(100, TimeUnit.MILLISECONDS)) {
            // работа с ресурсами
        }
    } finally {
        lock2.unlock();
    }
}
  1. Разрушение deadlock'а – через ThreadMXBean можно детектить и прерывать deadlock'и.

  2. Отказ от вложенных блокировок – перепроектировать код, чтобы не требовалось удерживать несколько блокировок одновременно.

  3. Использование concurrent структур – например, ConcurrentHashMap вместо synchronized блоков.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы