Работал ли с ReentrantLock

«Работал ли с ReentrantLock» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал. ReentrantLock — это альтернатива synchronized, предоставляющая больше гибкости. Основные преимущества:

  • Возможность честного (fair) или нечестного (non-fair) распределения блокировок.
  • Методы tryLock(), lockInterruptibly(), позволяющие избежать deadlock.
  • Поддержка условий (Condition) для более сложной синхронизации.

Пример:

val lock = ReentrantLock()
fun safeIncrement() {
    lock.lock()
    try {
        counter++
    } finally {
        lock.unlock() // Важно освобождать в finally!
    }
}

Использую, когда нужен контроль над блокировками или сложная логика синхронизации.