前段时间一个小伙伴去面试,遇到这样一个问题。

”Fail-safe机制与Fail-fast机制分别有什么作用“

他说他听到这个问题的时候,脑子里满脸问号。那么今天我们来看一下,关于这个问题,普通人和高手应该如何回答吧。

普通人的回答
 额… . 嗯 …

高手的回答
Fail-safe和Fail-fast,是多线程并发操作集合时的一种失败处理机制。

Fail-fast : 表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出ConcurrentModificationException异常,从而导致遍历失败,像这种情况

定义一个Map集合,使用Iterator迭代器进行数据遍历,在遍历过程中,对集合数据做变更时,就会发生Fail-fast。

java.util包下的集合类都是快速失败机制的, 常见的的使用Fail-fast方式遍历的容器有HashMap和ArrayList等。

Fail-safe:表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出ConcurrentModificationException。

原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,

在拷贝的集合上进行遍历。由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所作的修改并不能被迭代器检测到

比如这种情况

定义了一个CopyOnWriteArrayList,在对这个集合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。

java.util.concurrent包下的容器都是安全失败的,可以在多线程下并发使用,并发修改。

常见的的使用Fail-safe方式遍历的容器有ConcerrentHashMap和CopyOnWriteArrayList等。

总结
好的, Fail-safe和Fail-fast 的作用,你理解了吗?

你们是否有更好的回答方式? 欢迎在评论区给我留言!

本期的普通人VS高手面试系列就到这里结束了,喜欢的朋友记得一键三连,加个关注。

我是Mic,一个工作了14年的Java程序员,咱们下篇文章再见。

最新文章

  1. 引用类型-RegExp类型
  2. 自动去除nil的NSDictionary和NSArray构造方法
  3. UIButton 长按点击 背景改变效果
  4. 浅析Mysql数据回滚错误的解决方法
  5. KACK的处理方法
  6. Java 测试Hibernate+Mysql简单的数据存储
  7. Java Socket 入门2 Java与C# Socket 通信
  8. 100本最棒的web前端图书推荐
  9. 写出稳定的Modbus代码之点滴经验
  10. js 数组与对象的区别
  11. python 浅谈小数据池和编码
  12. 如何使用onclick方式添加多个事件回调函数
  13. [daily][archlinux][pacman] 删除所有孤立包(orphan)
  14. tf.nn.dropout
  15. Codeforces 158B:Taxi
  16. git 常用文件目录介绍
  17. ubifs文件系统挂载时提示ubi0: MTD device 5 is write-protected, attach in read-only mode
  18. WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则
  19. vim 将tab转为空格
  20. yjh_study_command

热门文章

  1. thinkpad笔记本选型
  2. 配置DHCP Relay的功能原理是什么?
  3. 1. 企业级调度器LVS初识、工作模式详解
  4. Java基础:ThreadLocal及其原理
  5. 一些JDK自带的性能分析利器
  6. Android 12(S) 图形显示系统 - BufferQueue的工作流程(十)
  7. 报错----运行springboot项目出现:Type javax.xml.bind.JAXBContext not present
  8. kubernetes更改coredns增加解析
  9. Linux移植到自己的开发板(一)环境搭建
  10. Blazor 002 : 一种开历史倒车的UI描述语言 -- Razor