`
wynet321
  • 浏览: 26620 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

fail-fast和fail-safe机制

    博客分类:
  • JAVA
阅读更多

1. fail-fast机制在遍历一个集合时,当集合结构被修改,很大可能会抛出Concurrent Modification Exception。fail-fast会在以下两种情况下抛出此异常:

    a)单线程情况下,在遍历集合的过程中修改了结构,比如iterator的remove方法。

    b)多线程情况下,当一个线程在遍历这个集合,而另一个线程对这个集合的结构进行了修改。

之所以很大可能抛出异常是因为集合是根据集合内元素个数的变化判断是否抛出异常,比如HashMap的modCount。也许执行此判断时modCount还没有被修改,所以不一定抛出异常。所以尽量不要在产品代码中使用,可以用来debug。

if (modCount != expectedModCount)
   throw new ConcurrentModificationException();

具有fail-fast机制的主要集合有HashMap,Vector,ArrayList,HashSet。

 

2. fail-safe机制会把集合复制之后再进行修改,也就是说修改是在另外一个集合上进行的,因此不会抛出ConcurrentModificationException。fail-safe机制有两个结果:

    a)复制集合实例,导致占用内存堆空间。

    b)复制出来的集合实例无法保证与原实例完全相同。

具有fail-safe机制的主要集合有CopyOnWriteArrayList, ConcurrentHashMap。

 

分享到:
评论

相关推荐

    【面试普通人VS高手系列】Fail-safe机制与Fail-fast机制分别有什么作用.doc

    在多线程并发操作中,Fail-safe机制和Fail-fast机制是两种常见的失败处理机制,它们的作用和实现原理有所不同。 Fail-fast机制是一种快速失败机制,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出...

    fail-safe fail-fast知多少

    【Fail-safe 和 Fail-fast Iterator 知识点详解】 在Java编程中,集合类是我们处理数据时不可或缺的一部分。在遍历集合元素时,我们通常会使用迭代器(Iterator)。然而,当我们尝试在遍历过程中修改集合时,可能会...

    Java面试题-基础-集合有关的知名厂商面试题和基础复习

    掌握 Iterator 的 fail-fast 、fail-safe 机制 ArrayList() 会使用长度为零的数组 ArrayList(int initialCapacity) 会使用指定容量的数组 public ArrayList(Collection<? extends E> c) 会使用 c 的大小作为数组...

    java-集合-知识点汇总

    fail-fast机制将抛出异常,而fail-safe机制将忽略修改。 * transient关键字:在ArrayList中,elementData字段使用transient关键字修饰,以避免序列化时将elementData字段序列化。 * readObject和writeObject方法:在...

    Java Collections Interview Questions.pdf

    fail-fast 和 fail-safe 迭代器是 Java Collections 框架中的两种迭代器模式。fail-fast 迭代器在集合修改时,会抛出 ConcurrentModificationException 异常。fail-safe 迭代器在集合修改时,会返回当前集合的快照。...

    Java集合类面试题.docx

    当集合在迭代过程中被修改,除了通过迭代器自身的remove()方法,fail-fast机制会抛出ConcurrentModificationException,以防止数据不一致。 14. **fail-fast与fail-safe有什么区别?** fail-fast会在检测到并发...

    【Java基础】集合框架-面试题.pdf

    【Java基础】集合框架-面试题。包含: 1. ArrayList 和 Vector 的区别;...3. 快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别; 4. HashMap 的数据结构、工作原理 等Java集合部分经常遇到的面试题总结

    apm312固件刷机文件

    + If the lost input channel is not restored within ~1 second, it will be set to the default fail-safe value (for channel 1-4) or kept at the last value (for channel 5-8) – Lost channel signal is ...

    java-collection-all-in-one.pdf

    在遍历List集合时,存在fail-fast和fail-safe两种迭代机制。fail-fast迭代器在检测到集合结构被修改的情况下会快速抛出ConcurrentModificationException异常;fail-safe迭代器则不会抛出这种异常,因为它工作在集合...

    Java企业系列面试题(集合篇).docx

    7. **fail-fast和fail-safe**:fail-fast迭代器(如ArrayList和HashSet的迭代器)在检测到集合结构被修改时会抛出ConcurrentModificationException。而fail-safe迭代器(如CopyOnWriteArrayList的迭代器)可以在多...

    dubbo分布式架构可运行代码demo

    Dubbo提供了多种容错机制,如Fail-fast、Fail-over、Fail-safe等,用于处理服务调用失败的情况。Demo中可能配置了默认的Fail-fast,快速失败并抛出异常。 通过这个"Dubbo入门测试代码可运行"的Demo,你可以逐步...

    dubbo+zookeeper+spring -demo

    Dubbo支持多种容错机制,例如Fail-fast(快速失败)、Fail-safe(安全失败)、Fail-over(失败重试)和Fail-back(失败自动恢复)等。这些机制确保了服务的高可用性。 6. **监控与治理**: Dubbo内置了监控中心,...

    分布式RPC系统框架-Dubbo(2.7)教程(4.31G)

    3. **容错机制**:Dubbo提供了多种容错策略,如Fail-fast(快速失败)、Fail-safe(安全失败)、Fail-over(重试)、Fail-back(回退)等,以应对服务调用失败的情况。 4. **监控中心**:Dubbo支持与监控中心集成,...

    Java版水果管理系统源码-Java:Java笔试面试题整理

    Java版水果管理系统源码 ...fail-fast 与 fail-safe 机制有什么区别 IOC的优点是什么 IO 和 NIO的区别,NIO优点 Java 8 / Java 7 为我们提供了什么新功能 什么是竞态条件? 举个例子说明。 MVC的各个部分

    Java集合面试问题

    - **Fail-safe**:某些集合如`ConcurrentHashMap`和`CopyOnWriteArrayList`提供了一种线程安全的遍历机制,即使遍历过程中集合被修改也不会抛出异常。 - 实现机制:通过创建集合的副本进行遍历,这样就不会受到集合...

    最全java八股文高级/资深面试题

    6. **迭代器的fail-fast与fail-safe**:fail-fast是指当集合结构发生变化时,迭代器会立即抛出`ConcurrentModificationException`。而fail-safe的迭代器(如`Collections.synchronizedList`返回的迭代器)则不会立即...

    Java基于Dubbo分布式简易支付系统源码.zip

    Dubbo提供的容错策略,如Fail-fast、Fail-over、Fail-safe等,可以应对网络异常或服务故障,保证系统的稳定性。同时,通过内置的监控中心,开发者可以实时查看服务的运行状态,进行性能优化。 在文件名"pay-master...

    java面试题精选

    8. **Fail-fast与Fail-safe机制**:Fail-fast是指当检测到错误时立即抛出异常停止程序;Fail-safe则尝试处理错误,使程序能够继续运行。 9. **GET与POST请求的区别**:GET用于获取资源,数据在URL中可见,安全性和...

    Dubbo基础教程及源码.zip

    容错机制是Dubbo的另一关键部分,它包括Fail-fast(快速失败)、Fail-over(重试)、Fail-safe(安全失败)、Fallback(降级)和Force-balance(强制路由)等策略。这些策略可以帮助系统在服务出现问题时保持稳定...

    基于Java的源码-服务框架 Dubbo.zip

    5. **容错机制**:Dubbo提供了多种容错策略,如Fail-fast(快速失败)、Fail-over(重试其他服务器)、Fail-safe(失败安全,忽略异常)、Forking(并行调用,只返回成功结果)等,以应对服务调用过程中可能出现的...

Global site tag (gtag.js) - Google Analytics