fail-fast即快速失败机制,是 Java 集合中一种错误检测机制,旨在尽早地发现并发修改异常。当对一个集合...
Fail-fast:Fail-fast是一种设计原则或模式,强调在程序出现错误或异常时立即停止执行并报告问题。 Fail-safe:Fail-safe是一种设计原则或机制,旨在在系统出现故障或错误时保持基本功能或以安全的方式停止运行。 2、目标 Fail-fast:Fail-fast的目标是尽早发现和报告问题,以便开发人员能够快速定位和解决错误,并提高系统的...
快速失败(fail-fast)机制 这里要着重讲一下快速失败的机制了!fail-fast 在 Java 中主要用于检测集合在并发修改下的结构性变化。在遍历过程中,如果结构发生了变化,例如删除了元素,Java 会立刻抛出 ConcurrentModificationException 异常。fail-fast 机制的背后是通过一个modCount 变量来实现的。每次集合结构发生变化...
Fail-fast 与 Fail-safe 是 Java 中两种不同的错误处理机制,分别适用于不同的场景。Fail-fast 可以帮助我们尽早发现问题,而 Fail-safe 则可以让我们在迭代过程中修改集合结构而不用担心触发异常。在实际的开发过程中,需要根据具体的需求和场景来选择使用哪种机制。
今天,我们来谈谈fail-fast与fail-safe是什么以及工作机制。 fail-fast是什么? fail-fast的字面意思是“快速失败”。当我们在遍历集合元素的时候,经常会使用迭代器,但在迭代器遍历元素的过程中,如果集合的结构被改变的话,就会抛出异常,防止继续遍历。这就是所谓的快速失败机制。
快速失败(fail-fast):快速失败时Java集合的一种错误监测机制 (1)在用迭代器遍历一个集合对象时,如果线程A遍历过程中,线程B对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modificati…
fail-safe机制不同于fail-fast,它不会直接访问原集合,而是会先创建一个集合的副本,迭代时操作副本内容,这样即便原集合被修改了也不会影响到当前遍历。不过,这种方式的缺点是,遍历期间集合的修改无法被同步感知。java.util.concurrent包下的许多集合类(如CopyOnWriteArrayList和ConcurrentHashMap)都使用了fail-safe机制。
fail-fast会在以下两种情况下抛出ConcurrentModificationException (1)单线程环境 集合被创建后,在使用Iterator遍历它的过程中修改了结构。 注意Iterator的 remove()方法会让expectModcount和modcount 相等,所以是不会抛出这个异常。 (2)多线程环境 当一个线程在遍历这个集合,而另一个线程对这个集合的结构进行了修改。
fail-fast机制在遍历一个集合时,当集合结构被修改,会抛出Concurrent Modification Exception。 fail-fast会在以下两种情况下抛出ConcurrentModificationException (1)单线程环境 集合被创建后,在遍历它的过程中修改了结构。 注意remove()方法会让expectModcount和modcount 相等,所以是不会抛出这个异常。
Fail-Safe 迭代的出现,是为了解决fail-fast抛出异常处理不方便的情况。fail-safe是针对线程安全的集合类。 上面的fail-fast发生时,程序会抛出异常,而fail-safe是一个概念,并发容器的并发修改不会抛出异常,这和其实现有关。并发容器的iterate方法返回的iterator对象,内部都是保存了该集合对象的一个快照副本,并且没有mo...