Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: deadlock, lock

Что такое Deadlock?

Вопрос проверяет понимание одной из самых опасных проблем многопоточности и причин её возникновения.

Короткий ответ

Deadlock — это ситуация, когда два или более потоков навсегда блокируют друг друга. Каждый поток удерживает ресурс и ждёт ресурс, занятый другим потоком. В результате ни один поток не может продолжить выполнение. Программа при этом не падает, а просто «зависает».

Длинный ответ

Deadlock относится к логическим ошибкам многопоточности и часто проявляется только в продакшене.

Определение

Deadlock — это состояние, при котором несколько потоков находятся в бесконечном ожидании ресурсов, удерживаемых друг другом.

Классический пример

Рассмотрим типичную ситуацию:

  1. Поток A захватил монитор объекта lock1

  2. Поток B захватил монитор объекта lock2

  3. Поток A ждёт lock2

  4. Поток B ждёт lock1

Ни один из потоков не может продолжить работу.

synchronized (lock1) {
    // ...
    synchronized (lock2) {
        // ...
    }
}

Основные условия возникновения

Deadlock возможен, если одновременно выполняются условия:

  • Взаимное исключение

  • Удержание и ожидание

  • Отсутствие принудительного освобождения

  • Циклическое ожидание

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

На практике используют несколько подходов:

  • Фиксированный порядок захвата блокировок

  • Минимизация количества synchronized-блоков

  • Использование tryLock()

  • Проектирование без shared state

Вывод

Deadlock — это критическая ошибка многопоточности, которую проще предотвратить архитектурно, чем обнаружить и исправить.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#deadlock

#lock

Подпишись на Java Developer в телеграм