什么是 Lock()、UnLock()、ReentrantLock()、TryLock() 以及它与 Java 中的同步块有何不同?]

已发表: 2020-07-05

在本教程中,我们将讨论 Lock()、UnLock()、ReentrantLock()、TryLock() 以及它与 Java 中的同步块有何不同。

如果您还有以下问题,那么您来对地方了。

  • Java中的锁
  • Java 锁示例和并发锁与同步
  • Java 并发教程——可重入锁
  • 同步 – Java 的正确锁定/解锁用法
  • java - 同步与锁定
  • java锁解锁示例
  • java中的锁定机制
  • java lock 解锁不同的线程

让我们开始吧。 首先让我们理解这些术语中的每一个,然后我们将回顾工作示例。

锁():

java.util.concurrent.locks 。 锁是一种线程同步机制,类似于同步块,除了锁可以比 Java 的同步块更复杂。 它是一个接口和类,为锁定和等待与内置同步和监视器不同的条件提供框架。

开锁():

UnLock() 释放对 Object 的锁定。

重入锁():

ReentrantLock由上次成功锁定但尚未解锁的线程拥有。 当锁不被另一个线程拥有时,调用lock的线程将返回,成功获取锁。 如果当前线程已经拥有锁,该方法将立即返回。

尝试锁定():

TryLock() 仅在调用时空闲时才获取锁。

提示-1

如果您只是锁定一个对象,我更喜欢使用synchronized.

而使用同步,它非常清楚并且不可能出错:

示例详细信息:

  1. 创建类:CrunchifyLockTutorial.java
  2. 创建内部类:Company 和 CrunchifyLoop
  3. 从 Main 创建两个 Company 类的对象
  4. 在这些对象上启动 10 个线程循环
  5. 当 Company1 与 Company2 对话时,它会锁定一个对象。 如果同时——如果Company2想与Company1交谈,那么它会说——冲突——锁已经存在。 (两家公司已经在谈)。

输出:

提示 2

您可以使用synchronizedvolatilewait低级原语来实现java.util.concurrent的实用程序所做的一切。