Java 中的 CountDownLatch2025年5月12日 | 阅读 5 分钟 CountDownLatch 类是另一个用于并发执行的重要类。它是一种同步辅助工具,允许一个或多个线程等待,直到另一个线程中正在执行的一组操作完成。 它使用我们在构造函数中传递的计数进行初始化。调用 countDown() 方法会阻塞 await 方法,直到当前计数达到零,之后所有等待的线程都会被释放,并且任何后续对 await 的调用会立即返回。CountDownLatch 不要求调用 countdown() 的线程等待计数达到零再继续。它会阻止任何线程在所有线程都能通过之前,提前通过 await。 ![]() CountDownLatch 根据 count 值用于多种目的
CountDownLatch 的构造函数CountDownLatch 提供了一个参数化构造函数。它接受一个整数值作为计数。它构造 CountDownLatch 并用给定的计数值进行初始化。 注意:当 count 的值为负数时,构造函数会抛出 IllegalArgumentException。语法 参数 count -> 这是在线程能够通过 await() 之前必须调用 countdown() 的次数。 CountDownLatch 的方法CountDownLatch 类有几种可用于并发控制的方法。CountDownLatch 类还提供了 java.lang.Object 类的方法,因为它由 CountDownLatch 类继承。 java.lang.Object 类的方法如下:
如果您不了解 Object 类的方法,请参考以下链接:object-class CountDownLatch 提供了以下方法: 1. await()await() 方法使当前线程等待,直到以下情况之一未发生:
当当前计数设置为零时,await() 方法会立即返回。 当当前计数既不为零也不是负数时,await() 方法会禁用当前线程的调度,并且当前线程将保持休眠状态,直到发生以下情况之一:
语法 await() 方法具有以下语法: 它不接受任何值,也不返回任何值。 抛出 当当前线程在等待时被中断,await() 方法会抛出 InterruptedException。 2. await()这是 await() 方法的另一种变体,它使当前线程等待,直到以下情况未发生:
当当前计数设置为零时,await() 方法会立即返回 true。当等待时间在计数达到零之前已过时,它会返回 false。 当当前计数既不为零也不是负数时,await() 方法会禁用当前线程的调度,并且当前线程将保持休眠状态,直到发生以下情况之一:
语法 参数 timeout: timeout 参数是 long 类型,定义了最大等待时间。 unit: unit 参数是 TimeUnit 类型,定义了 timeout 参数的时间单位。 返回值 当计数达到零时返回 true,当等待时间在计数达到零之前已过时返回 false。 抛出 当当前线程在等待时被中断,await() 方法会抛出 InterruptedException。 3. countdowncountdown() 方法是 CountDownLatch 类提供的另一个重要方法。它记录锁存器的计数,并在计数达到零时释放所有等待的线程。它完成了以下工作:
4. getCount这是 CoutDownLatch 类提供的另一个重要方法。getCount() 方法用于获取我们当前使用的锁存器的计数。 语法 它不接受任何参数。它返回锁存器的当前计数。 5. toStringtoString() 是 CountDownLatch 类提供的最后一个方法。它用于获取一个字符串,该字符串将标识锁存器及其状态。 语法 覆盖 它覆盖了 Object 类中的 toString 方法。 返回值 它返回一个标识锁存器及其状态的字符串。 让我们来看一个 CountDownLatch 的例子,了解它是如何工作的以及如何在 Java 中实现它。 CountDownLatchExample.java 输出 ![]() |
在本节中,我们将学习什么是数组旋转以及如何通过 Java 程序来旋转数组。Java 数组旋转数组旋转简单地意味着将数组元素移到指定位置。我们可以旋转...
5 分钟阅读
哈希函数是一个键值映射函数。当两个或多个键通过这些哈希方法映射到相同值时,就会存在重复值。链式哈希的使用可以解决冲突。每个哈希表单元都应该指向条目链表…
阅读 6 分钟
Java Queue 接口是 Java 集合框架的重要组成部分,它提供了队列数据结构的实现。它遵循先进先出 (FIFO) 原则,其中元素在末尾插入,在开头移除。本文将探讨...
阅读 4 分钟
给定一个整数数组“arr”和一个整数 k。我们有一个空栈和以下两个操作:“Push”和“Pop”。我们还有一个区间为 [1, k] 的整数流。使用两个栈过程将数字推入栈中...
阅读 16 分钟
在本文中,我们将学习 Java 编程语言中的开放式哈希和封闭式哈希。在文章结束时,我们将涵盖该主题的不同部分,例如为什么这些技术在 Java 编程语言中使用,它们是什么...
阅读 22 分钟
? 在 Java 中,main() 方法在程序执行中起着至关重要的作用。main() 方法是在执行期间首先遇到的方法。因此,它是程序的入口点。我们不能修改 main() 方法的语法。唯一能...
阅读 3 分钟
Calendar 类的具体子类称为 GregorianCalendar。GregorianCalendar 类具有其所有继承成员的实现。Calendar 类实现了最常用的公历。为了在 Java 中使用公历,我们导入 Java.util.GregorianCalendar...
阅读 16 分钟
栈作为一种线性数据结构,实现的是后进先出 (LIFO) 方法,因此最后添加的元素最先被移除。需要使用两个 FIFO 队列来实现 LIFO 栈,因为它们按照先进先出...
5 分钟阅读
矩阵遍历是计算问题解决中常见的难题,与路径查找、模拟和游戏有关。网络上讨论的一个此类问题是“腐烂的橙子问题”,它模拟了橙子网格上腐烂的传播。这是一个理论上的...
7 分钟阅读
在 Java 编程中,标识符通过充当符号名称来帮助识别和使用程序中的不同元素。这些标识符可以代表许多实体,包括类、变量、方法、包、常量等。开发人员可以通过...提高可读性。
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India