我是靠谱客的博主 腼腆豌豆,这篇文章主要介绍快速失败(fail-fast)和安全失败(fail-safe)的区别是什么,现在分享给大家,希望可以做个参考。

题目来源:https://zhuanlan.zhihu.com/p/86536581
java面试清单
**java基础 **
快速失败(fail-fast)和安全失败(fail-safe)的区别是什么
在这里插入图片描述
什么是同步修改?
当一个或者多个线程正在遍历一个集合Collection,此时另外一个线程修改了这个集合的内容。这就是并发|同步修改。
什么是快速失败?
由修改引发的失败:在使用迭代器对集合对象进行遍历的时候,如果A线程正在进行遍历,正好B线程对集合进行了修改,那么A线程则会抛出ConcurrentModificationException
快速失败的原理:迭代器在遍历时直接访问集合中的内容,并且在遍历的时候会使用一个modCount的变量。集合在被遍历期间,若果内容发生变换,或导致modCount这个变量发生变换。因此迭代器在每一次使用hashNext()或者net()遍历下一个元素之前,都会检查这modCount的值是否是expectedmodCount值,是则继续遍历,否则抛出异常
快速失败是不安全的:因为在B线程在进行修改的过程中,能够把这个modCount值修改成expectModeCount,,使得异常无法争取的抛出
使用场景:java.util包下的集合类
什么事安全失败
采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有的集合内容,在拷贝的集合上进行遍历
安全失败的原理:由于迭代是在拷贝的集合上进行遍历的,因此原集合内容的修改不回被迭代器检测到,所以不会触发异常
使用场景:java.util.concurrent包下的集合类

最后

以上就是腼腆豌豆最近收集整理的关于快速失败(fail-fast)和安全失败(fail-safe)的区别是什么的全部内容,更多相关快速失败(fail-fast)和安全失败(fail-safe)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部