Fail-safe,表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出 ConcurrentModificationException。
原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中 对原集合所作的修改并不能被迭代器检测到 比如这种情况(贴下面这个图)
定义了一个 CopyOnWriteArrayList,在对这个集合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。java.util.concurrent 包下的容器都是安全失败的,可以在多线程下并发使用,并发修改。常见的的使用 fail-safe 方式遍历的容器有 ConcerrentHashMap 和 CopyOnWriteArrayList 等。
二、问题总结
好的, fail-safe 和 fail-fast 的作用,你理解了吗?
你们是否有更好的回答方式? 欢迎在评论区给我留言!
本期的高手面试系列文章就到这里结束了,喜欢的朋友记得一键三连,加个关注,
我是 浮生,一个工作了 14 年的 Java 程序员,咱们下期再见。
三、粉丝福利
最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍?、 需要的小伙伴 可以关注我
公众号:“?灰灰聊架构?”, 回复暗号:“?321?”即可获取