Fail-fast and Fail-safe in Java2025年5月2日 | 阅读 4 分钟 Fail-fast 和 Fail-safe 是 Java 中的迭代器或集合。 Java SE 规范并不使用 Fail-safe 这个术语。我们使用 Fail-safe 来区分 非 Fail-fast 和 Fail-fast 迭代器。Fail-Fast 系统会尽快终止那些暴露了故障的操作,并停止整个操作。而 Fail-Safe 系统则不会终止那些暴露了故障的操作。Fail-safe 系统会尽量避免引发故障。 ![]() Fail-fast 和 Fail-safe 是并发修改的概念。并发修改是指在另一个任务正在处理对象时,该对象被并发修改的过程。Fail-fast 和 Fail-safe 是用于迭代 Collection 对象的迭代器。 让我们逐一详细了解 Fail-fast 和 Fail-safe。 Fail-fast 迭代器当我们使用 Fail-fast 迭代器时,如果在迭代集合的线程过程中向集合添加或删除了元素,它会立即抛出 ConcurrentModificationException。示例:HashMap 中的迭代器、ArrayList 上的迭代器等。 Fail-fast 迭代器使用 modCount,即一个内部标志,用于检查集合是否被结构性修改。当 Fail-fast 迭代器通过 next() 方法获取下一个值时,它会检查 modCount 标志的值。当迭代器发现 modCount 值被修改时,它就会抛出 ConcurrentModificationException。 让我们以 Fail-fast 迭代器为例,了解它在 Java 中是如何工作的。 FailFastIterator.java 输出 ![]() 让我们再看一个 Fail-fast 迭代器的例子,我们将对 ArrayList 使用迭代器。 FailFastIterator2.java 输出 ![]() Fail-safe 迭代器Java SE 规范不使用 Fail-safe 这个术语。最好称之为 非 Fail-fast 迭代器。Fail-safe 迭代器不会抛出 ConcurrentModificationException,它会尽量避免引发异常。Fail-safe 迭代器会创建原始集合或对象数组的副本,然后迭代这个复制的集合。在迭代器中进行的任何结构性修改都会影响复制的集合,而不是原始集合。因此,原始集合保持结构不变。 以下是与 Fail-safe 相关的一些要点:
让我们以 Fail-safe 迭代器为例,了解它在 Java 中实际是如何工作的。 FailSafeIterator.java 输出 ![]() 让我们再看一个 Fail-safe 迭代器的例子,我们将对 CopyOnWriteArrayList 使用迭代器。 FailSafeIterator2.java 输出 ![]() Fail-safe 和 Fail-fast 之间的区别我们根据一些关键因素定义了 Fail-safe 和 Fail-fast 迭代器之间的主要区别。
|
在本节中,我们将学习如何分步编译和运行 Java 程序。步骤 1:在记事本上编写程序,并将其保存为 .java (例如,DemoFile.java) 扩展名。 class DemoFile { public static void main(String args[]) { System.out.println("Hello!"); System.out.println("Java"); } } 步骤 2:打开命令提示符。步骤 3:设置 .java 所在的目录...
阅读1分钟
当谈到使用 Java 和 Selenium 进行 Web 自动化测试时,有一些基本工具和函数是每位自动化工程师都必须理解的。其中就包括 findElement() 和 findElements()。这些方法对于定位页面上的 Web 元素至关重要,但它们有不同的用途和...
5 分钟阅读
由于强大的继承系统,Java 中的一个类可以通过继承另一个类的特征和行为。在处理继承时,构造函数对于初始化对象和维护类的正确运行至关重要。在本节中,我们将探讨构造函数的功能……
阅读 4 分钟
具有边框和标题的顶层窗口称为 Frame 类。作为默认布局管理器,它使用 BorderLayout。java.awt.Frame 组件是一个 Windows 图形系统组件,就像典型的 GUI 窗口一样,包含边框和标题栏。默认组件...
阅读 6 分钟
Java 版本 JDK Alpha 和 Beta (1995) Java Alpha 和 Beta 是最初发布的版本,但它们具有高度不稳定的 API 和 ABI。提供的 Java 网页浏览器名为 WebRunner。Java 最早的公共版本是 1995 年的 JDK Alpha 和 Beta。它们不适合...
11 分钟阅读
在面向对象编程中,类是基本的构建块。它可以定义为描述类实例化相关的数据和行为的模板。实例化一个类就是创建该类的对象(变量),该对象可用于访问...
5 分钟阅读
是访问修饰符。它可以分配给变量、方法和内部类。它是限制性最强的访问修饰符。需要记住的点:私有访问修饰符只能在同一个类中访问。我们不能将 private 分配给外部类和接口。...
阅读 3 分钟
? 理解数据类型的大小对于任何编程语言中高效的内存管理至关重要。在 Java 中,int 的大小取决于平台,这意味着它在不同的系统上可能有所不同。在本文中,我们将探讨确定大小的各种技术...
阅读 3 分钟
Java 8 的发布在 java.time 包中引入了新的日期和时间 API。这个新 API 提供了改进的功能以及更直观的日期和时间处理方法。开发者经常遇到的一个常见任务是在旧的 java.util.Date 类之间进行转换……
5 分钟阅读
QuickSort 是一种高效的分治排序算法,它递归地将数组划分为较小的子数组。多线程允许在不同分区上并行执行排序,利用多个处理器核心来减少执行时间。它允许程序同时执行两个或多个部分以...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India