138 прочтений · 1 год назад
Java 1082. Назовите различия между synchronized и ReentrantLock?
Ниже перечислены некоторые различия между synchronized и ReentrantLock в Java: Гибкость использования: ReentrantLock предоставляет более гибкий способ управления блокировками в сравнении с synchronized. Он обеспечивает возможность использования нескольких условных переменных, попыток получить блокировку с таймаутом и прерываниями, что делает его более мощным инструментом для управления потоками. synchronized, с другой стороны, предоставляет простой и удобный способ синхронизации методов или блоков, но не поддерживает дополнительные функции, такие как условные переменные...
6 прочтений · 10 месяцев назад
Советы по Java API 🚀 Синхронизация в Java - ReentrantLock Усовершенствуйте синхронизацию потоков с помощью ReentrantLock в Java. Для достижения более тонкого контроля и продвинутых механизмов блокировки. Объект класса ReentrantLock решает те же задачи, что и блок synchronized. Поток висит на вызове метода lock() в ожидании своей очереди занять этот объект. Владеть локом, как и находиться внутри блока synchronized может только один поток одновременно. unlock(), подобно выходу из блока синхронизации, освобождает объект-монитор для других потоков. В отличие от блока синхронизации, ReentrantLock дает расширенный интерфейс для получения информации о состоянии блокировки. Методы лока позволяют еще до блокировки узнать, занят ли он сейчас, сколько потоков ждут его в очереди, сколько раз подряд текущий поток завладел им. Шире и возможные режимы блокировки. Кроме обычного ожидающего lock(), вариант tryLock() с параметром ожидает своей очереди только заданное время, а без параметра – вообще не ждет, а только захватывает свободный лок. Еще одно отличие – свойство fair. Лок с этим свойством обеспечивает «справедливость» очереди: пришедший раньше поток захватывает объект раньше. Блок synchronized не дает никаких гарантий порядка. 📎 Документация @javarush