Найти тему
81 подписчик

Советы по Java API 🚀


Синхронизация в Java - ReentrantLock

Усовершенствуйте синхронизацию потоков с помощью ReentrantLock в Java.

Для достижения более тонкого контроля и продвинутых механизмов блокировки.

Объект класса ReentrantLock решает те же задачи, что и блок synchronized. Поток висит на вызове метода lock() в ожидании своей очереди занять этот объект. Владеть локом, как и находиться внутри блока synchronized может только один поток одновременно. unlock(), подобно выходу из блока синхронизации, освобождает объект-монитор для других потоков.

В отличие от блока синхронизации, ReentrantLock дает расширенный интерфейс для получения информации о состоянии блокировки. Методы лока позволяют еще до блокировки узнать, занят ли он сейчас, сколько потоков ждут его в очереди, сколько раз подряд текущий поток завладел им.

Шире и возможные режимы блокировки. Кроме обычного ожидающего lock(), вариант tryLock() с параметром ожидает своей очереди только заданное время, а без параметра – вообще не ждет, а только захватывает свободный лок.

Еще одно отличие – свойство fair. Лок с этим свойством обеспечивает «справедливость» очереди: пришедший раньше поток захватывает объект раньше. Блок synchronized не дает никаких гарантий порядка.


Советы по Java API 🚀  Синхронизация в Java - ReentrantLock  Усовершенствуйте синхронизацию потоков с помощью ReentrantLock в Java.
1 минута