Ответ
Да, работал. ReentrantLock — это альтернатива synchronized, предоставляющая больше гибкости. Основные преимущества:
- Возможность честного (fair) или нечестного (non-fair) распределения блокировок.
- Методы
tryLock(),lockInterruptibly(), позволяющие избежать deadlock. - Поддержка условий (
Condition) для более сложной синхронизации.
Пример:
val lock = ReentrantLock()
fun safeIncrement() {
lock.lock()
try {
counter++
} finally {
lock.unlock() // Важно освобождать в finally!
}
}
Использую, когда нужен контроль над блокировками или сложная логика синхронизации.