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

Приходилось ли работать с deadlock

Deadlock — ситуация, когда два или более потока блокируют друг друга, ожидая освобождения ресурсов.

Пример:

java
Object lock1 = new Object();
Object lock2 = new Object();

Thread t1 = new Thread(() -> {
    synchronized (lock1) {
        synchronized (lock2) { // Может заблокироваться, если t2 уже взял lock2
            System.out.println("Thread 1");
        }
    }
});

Thread t2 = new Thread(() -> {
synchronized (lock2) {
synchronized (lock1) { // Может заблокироваться, если t1 уже взял lock1
System.out.println("Thread 2");
}
}
});

t1.start();
t2.start();

text

Способы избежать:
1. Упорядочивание блокировок (всегда брать lock1, потом lock2)
2. Использование `tryLock()` с таймаутом
3. Избегать вложенных синхронизаций
4. Использование concurrent коллекций вместо ручной синхронизации
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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