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

Как решишь проблему Deadlock при использовании вложенных синхронизованных блоков

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

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

  2. Использование атомарных операций (AtomicInteger и др.) или высокоуровневых concurrent-коллекций.

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

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

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

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