Sobes.tech
Назад к вопросам
Junior — Middle
68

Чем отличается использование ReentrantLock от встроенного синхронизатора synchronized в Java?

Компании, где спрашивали
ВТБВТБ

Ответ от нейросети

sobes.tech AI

ReentrantLock и synchronized — оба используются для синхронизации потоков в Java, но имеют ряд отличий:

  • Гибкость: ReentrantLock предоставляет дополнительные возможности, такие как попытка захвата блокировки с таймаутом (tryLock()), возможность прерывания потока при ожидании блокировки (lockInterruptibly()), а также возможность проверки, захвачена ли блокировка.

  • Производительность: В некоторых случаях ReentrantLock может работать эффективнее, особенно при высокой конкуренции потоков, но это зависит от реализации JVM.

  • Управление блокировкой: synchronized автоматически освобождает блокировку при выходе из блока кода, тогда как с ReentrantLock нужно явно вызывать unlock(), что требует аккуратности, чтобы избежать дедлоков.

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

Пример использования ReentrantLock:

import java.util.concurrent.locks.ReentrantLock;

ReentrantLock lock = new ReentrantLock();

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