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

Как можно избежать deadlock

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

  1. Упорядоченные блокировки – всегда захватывать блокировки в одном порядке. Например:
java
// Плохо: порядок может быть разным
synchronized (A) { synchronized (B) {} }
synchronized (B) { synchronized (A) {} }

// Хорошо: строгий порядок A → B
synchronized (A) { synchronized (B) {} }
synchronized (A) { synchronized (B) {} }

text

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

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

Главное правило – минимизировать области синхронизации и четко определять порядок блокировок.

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

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

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

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