Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Что такое ReentrantLock и зачем он нужен?

Вопрос проверяет знание альтернативы synchronized и возможностей явных блокировок.

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

ReentrantLock — это явная блокировка из пакета java.util.concurrent.locks.
Он позволяет гибко управлять захватом и освобождением лока.
Поддерживает try-lock и тайм-ауты.
Обеспечивает реентерабельность.
Часто используется там, где synchronized недостаточно гибок.

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

ReentrantLock предоставляет больше контроля над синхронизацией.

Определение

ReentrantLock — это реентерабельная взаимная блокировка с расширенными возможностями управления.

Реентерабельность

Один и тот же поток может:

  • захватывать lock несколько раз

  • обязан освободить его столько же раз

Базовое использование

ReentrantLock lock = new ReentrantLock();

lock.lock();
try {
    // критическая секция
} finally {
    lock.unlock();
}

Ключевые возможности

  • tryLock() — попытка захвата без блокировки

  • tryLock(timeout) — ожидание с тайм-аутом

  • lockInterruptibly() — реагирование на прерывание

  • поддержка fairness (справедливости)

Когда он нужен

  • сложные сценарии синхронизации

  • избежание дедлоков

  • контроль очередности потоков

  • неблокирующие попытки захвата

Вывод

ReentrantLock используется там, где требуется более тонкий контроль, чем может дать synchronized.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Java

    Java

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

#reentrantlock

#lock

#synchronization

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