synchronized
— ключевое слово языка. ReentrantLock
— класс из пакета java.util.concurrent.locks
.synchronized
может использоваться для блокировки методов или блоков кода. ReentrantLock
блокирует только блоки кода через методы lock()
и unlock()
.synchronized
является примитивной формой блокировки, не имеет возможностей тонкой настройки. ReentrantLock
предоставляет больше гибкости:
lockInterruptibly()
).tryLock()
).tryLock(long timeout, TimeUnit unit)
).newCondition()
).synchronized
автоматически освобождает блокировку при выходе из блокированного блока кода (в том числе при исключениях). ReentrantLock
требует явного вызова unlock()
в блоке finally
, чтобы избежать взаимоблокировки.ReentrantLock
может быть выше при высокой конкуренции потоков по сравнению с synchronized
(хотя в последних версиях Java различия могут быть незначительными).ReentrantLock
поддерживает честный режимsynchronized
— ключевое слово языка. ReentrantLock
— класс из пакета java.util.concurrent.locks
.synchronized
может использоваться для блокировки методов или блоков кода. ReentrantLock
блокирует только блоки кода через методы lock()
и unlock()
.synchronized
является примитивной формой блокировки, не имеет возможностей тонкой настройки. ReentrantLock
предоставляет больше гибкости:
lockInterruptibly()
).tryLock()
).tryLock(long timeout, TimeUnit unit)
).newCondition()
).synchronized
автоматически освобождает блокировку при выходе из блокированного блока кода (в том числе при исключениях). ReentrantLock
требует явного вызова unlock()
в блоке finally
, чтобы избежать взаимоблокировки.ReentrantLock
может быть выше при высокой конкуренции потоков по сравнению с synchronized
(хотя в последних версиях Java различия могут быть незначительными).ReentrantLock
поддерживает честный режимЗарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.