Встречается на собеседованиях • сегодня
Как решишь проблему Deadlock при использовании вложенных синхронизованных блоков
Deadlock возникает, когда потоки блокируют друг друга, ожидая освобождения ресурсов. Для решения:
- Упорядочивание блокировок – всегда захватывать блокировки в одном порядке:
java
// Правильно:
synchronized (lockA) {
synchronized (lockB) {
// код
}
}- Использование
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(); }
}-
Избегание вложенных блокировок – перепроектирование кода для уменьшения областей синхронизации.
-
Использование атомарных операций (
AtomicIntegerи др.) или высокоуровневых concurrent-коллекций.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы