Работал ли с ReentrantLock

Ответ

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

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

Пример:

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

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

Ответ 18+ 🔞

А, ну это же классика, ебать мои старые костыли! ReentrantLock — это типа как synchronized, только на стероидах, со всеми этими наворотами. Ну, знаешь, когда обычного synchronized уже мало, и хочется покомандовать процессом по-взрослому.

Основные плюсы, из-за которых его тащат, это:

  • Можно выбрать, кому отдавать блокировку — кто первый встал, того и тапки (честный режим, fair), или просто первому, кто успел вломиться (нечестный, non-fair). Обычно второй быстрее, ёпта.
  • Есть всякие хитрые методы вроде tryLock(), чтобы не зависать намертво, если замок занят, или lockInterruptibly(), чтобы тебя могли вежливо попросить отъебаться, если что. Спасение от дедлоков, ядрёна вошь!
  • И самое сокровенное — поддержка условий, этих самых Condition. Это когда тебе нужно не просто в семафор поиграть, а устроить целый театр с ожиданием и пробуждением по конкретным сигналам. Ёперный театр, но мощная штука.

Вот, смотри, как это обычно выглядит в коде:

val lock = ReentrantLock()
fun safeIncrement() {
    lock.lock() // Захватываем, как будто это последний пряник на тарелке
    try {
        counter++
    } finally {
        lock.unlock() // А это святое — отпускай в finally, иначе все накроется медным тазом!
    }
}

Лично я его в ход пускаю, когда обычной синхронизации уже не хватает, и начинается эта самая сложная логика, где потокам нужно не просто молчать, а общаться между собой по-умному. А так — да похуй, для простых случаев и synchronized с головой.