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

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

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

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

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

  3. Анализ зависимостей – выявлять циклические ожидания в дизайне системы.

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

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

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

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