Что такое Lock(), UnLock(), ReentrantLock(), TryLock() и чем он отличается от синхронизированного блока в Java?]

Опубликовано: 2020-07-05

В этом уроке мы рассмотрим Lock(), UnLock(), ReentrantLock(), TryLock() и чем они отличаются от Synchronized Block в Java.

Если у вас также есть вопросы ниже, то вы находитесь в правильном месте.

  • Блокировки в Java
  • Пример блокировки Java и блокировка параллелизма против синхронизированной
  • Учебное пособие по Java Concurrency — реентерабельные блокировки
  • синхронизация – Правильное использование блокировки/разблокировки для Java
  • java — синхронизация против блокировки
  • пример разблокировки java lock
  • механизм блокировки в java
  • java lock разблокировать другой поток

Давайте начнем. Сначала давайте разберемся с каждым из этих терминов, а затем рассмотрим рабочий пример.

Замок():

java.util.concurrent.locks . Блокировка — это механизм синхронизации потоков, подобный синхронизированным блокам, за исключением того, что блокировки могут быть более сложными, чем синхронизированные блоки Java. Это интерфейсы и классы, обеспечивающие основу для блокировки и ожидания условий, отличную от встроенной синхронизации и мониторов.

Разблокировать():

UnLock() снимает блокировку объекта.

Реентерантлокк():

ReentrantLock принадлежит потоку, который последним успешно заблокировал, но еще не разблокировал его. Поток, вызвавший lock , вернется, успешно получив блокировку, когда блокировка не принадлежит другому потоку. Метод вернется немедленно, если текущий поток уже владеет блокировкой.

Попробуйте заблокировать():

TryLock() получает блокировку, только если она свободна во время вызова.

Совет-1

Если вы просто блокируете объект, я бы предпочел использовать synchronized.

В то время как с синхронизированным это очень ясно и невозможно ошибиться:

Подробности примера:

  1. Создать класс: CrunchifyLockTutorial.java
  2. Создайте внутренние классы: Company и CrunchifyLoop.
  3. Из Main создайте два объекта класса Company
  4. Начать цикл потока для 10 на этих объектах
  5. Пока Компания1 разговаривает с Компанией2 — она блокирует объект. Если при этом — если Company2 хочет поговорить с Company1 , то пишет — Конфликтует — Блокировка уже существует. (Обе компании уже ведут переговоры).

Выход:

Совет-2

Вы можете добиться всего, что делают утилиты в java.util.concurrent , используя низкоуровневые примитивы, такие как synchronized , volatile или wait .