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

Как решить проблему DeadLock

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

  1. Упорядоченное получение блокировок – всегда захватывать блокировки в одинаковом порядке. Пример:
java
// Поток 1 и Поток 2 должны получать lockA, затем lockB
synchronized(lockA) {
    synchronized(lockB) {
        // Критическая секция
    }
}
  1. Использование tryLock() – с таймаутом для избежания вечного ожидания:
java
if (lock1.tryLock(100, TimeUnit.MILLISECONDS)) {
    try {
        if (lock2.tryLock(100, TimeUnit.MILLISECONDS)) {
            try {
                // Критическая секция
            } finally {
                lock2.unlock();
            }
        }
    } finally {
        lock1.unlock();
    }
}
  1. Избегание вложенных блокировок – перепроектировать логику, чтобы уменьшить количество блокировок.

  2. Использование высокоуровневых механизмов – например, ConcurrentHashMap или ExecutorService вместо ручной синхронизации.

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

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

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

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