Java 中的锁2025年5月12日 | 阅读 5 分钟 在 Java 中,Lock 是 Java.util.concurrent.locks 包中的一个接口。Java Lock 作为线程同步机制,与 synchronized 块类似。一段时间后,引入了一种新的锁定机制。它非常灵活,比 Synchronized 块提供了更多的选项。 以下是 Synchronized 块和 Lock 之间的一些区别:
在 Java 中,Lock 接口基本上提供了六种方法,如下所示: lock() 方法lock() 方法是 Lock 接口中最重要的方法之一。它用于获取锁。对于线程调度目的,当锁不可用时,当前线程将被禁用。lock() 方法是一个返回 void 的公共方法。 语法 注意:锁实现可用于查找锁的错误使用。在我们的代码中,调用可能会导致死锁并抛出未经检查的异常。lockInterruptibly() 方法lockInterruptibly() 方法是 Lock 接口的另一个重要方法,用于获取锁,除非当前线程被中断。如果锁可用,它会立即获取并返回锁。与 lock() 方法一样,只有在锁不可用时,当前线程才会被禁用线程调度。此时,线程将保持空闲状态,直到获得锁或另一个线程中断当前线程。 当当前线程在获取锁时被中断时,它会抛出 InterruptedException。 lockInterruptibly() 方法是一个返回 void 且不带参数的公共方法。 语法 tryLock() 方法tryLock() 方法主要在调用时用于获取锁。如果锁可用,它会立即以布尔值 true 返回锁。如果锁不可用,它将返回布尔值 false。 tryLock() 方法不带参数,并返回一个布尔值。 语法 我们使用 tryLock() 方法如下: tryLock(long time, TimeUnit unit) 方法它是 tryLock() 方法的另一个变体,用于在以下情况下获取锁:
如果锁可用,它将立即获取并返回锁。与 lock() 方法一样,只有在锁不可用时,当前线程才会被禁用线程调度。此时,线程将保持空闲状态,直到当前线程获得锁。其他线程不会中断当前线程,或者指定的等待时间会过去。 语法 参数 time: time 参数定义了等待锁的最大时间。 unit: unit 参数定义了 time 参数的时间单位。 注意:当当前线程在获取锁时被中断时,tryLock(long time, TimeUnit unit) 会抛出 InterruptedExeption。unlock() 方法unlock() 方法是另一个最常用的方法,用于释放锁。unlock() 方法是一个公共方法,不返回任何值,也不带任何参数。 语法 newCondition() 方法newCondition() 方法用于获取一个与此 Lock 实例绑定的新 Condition 实例。 在等待条件之前,必须由当前线程持有锁。调用 condition.wait() 将在等待之前原子地释放锁,并在等待返回之前重新获取锁。 语法 注意:当锁实现不支持条件时,newCondition() 会抛出 UnsupportedOperationExeption。LockExample.java 输出 ![]() |
数字 N 的阶乘是所有正数递减整数(小于或等于 N 的整数)的乘积。N! = N * (N - 1) ... * 3 * 2 * 1 在本节中,我们将创建 Java 程序来查找 N 的阶乘……
阅读 3 分钟
什么是 FCFS 调度算法?先来先服务 (FCFS) 是一种非抢占式 CPU 调度算法。它按照进程到达就绪队列的顺序进行调度。进程逐个执行直到完成。什么是到达时间?到达时间是进程...
阅读 6 分钟
在计算机科学和编程领域,矩阵操作是一个基本概念,在图形、图像处理和科学计算等各个领域都有应用。一个有趣且常见的矩阵操作是水平翻转。在本节中,我们将讨论水平...
5 分钟阅读
? Java Timer 类 在 Java 中,Timer 是一个属于 java.util 包的类。它扩展了 Object 类并实现了 Serializable 接口。该类提供了可用于执行与时间相关的活动的构造函数和方法。使用 Timer 类,我们可以……
阅读 2 分钟
Java 提供的按位运算符之一是 XOR。XOR(也称为异或)接收两个布尔操作数,如果它们不同则返回 true。当提供的两个布尔条件不能同时为真时,XOR 运算符就是...
7 分钟阅读
Moser-de Bruijn 序列是一个数字序列,序列中的每个数字都可以表示为 4 的不同幂的总和。之所以是这些数字,是因为它们的二进制表示在从计数开始的偶数位置只有 1...
5 分钟阅读
问题陈述 您有三个大小为 N 的整数数组,分别代表 N 个盒子的身高、宽度和长度。您的任务是将盒子堆叠起来,使身高达到最大,并返回总身高。要放一个...
阅读 6 分钟
铅笔图案是使用循环和其他逻辑概念从星号符号创建的另一种图案。通常要求通过程序绘制图案。我们使用以下方法来编写它的代码:从用户那里获取输入并将其存储到变量中,...
阅读 4 分钟
HashMap 是 Java 中用于存储键值对的基本数据结构。它们通过键提供对值的快速高效访问,使其成为各种应用程序的流行选择。通常,您可能需要比较两个 HashMap 以识别差异或相似之处。在此...
5 分钟阅读
Java 7 中对数值表示的增强支持包括引入了二进制字面量。以二进制(0 和 1)表示的数字称为二进制字面量。二进制字面量可用于 Java 中的字节、短整型、整型和长整型等整数类型……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India