Чем отличается ReentrantLock от synchronized в Java?

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

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

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

Чем отличается ReentrantLock от synchronized в Java?

Пожалуйста, предоставьте устный ответ на этот вопрос.

Ответ

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();
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее