什么是fail-fast

简介: 什么是fail-fast

fail-fast机制是java集合中的一种错误机制。

当使用迭代器迭代时,如果发现集合有修改,则快速失败做出响应,抛出ConcurrentModificationException异常。

这种修改有可能是其它线程的修改,也有可能是当前线程自己的修改导致的,比如迭代的过程中直接调用remove()删除元素等。

另外,并不是java中所有的集合都有fail-fast的机制。比如,像最终一致性的ConcurrentHashMap、CopyOnWriterArrayList等都是没有fast-fail的。


fail-fast是怎么实现的:

ArrayList、HashMap中都有一个属性modcount,每次对集合的修改这个值都会加1,在遍历前记录这个值expert*count中,遍历中检查两者是否一致,如果出现不一致就说明有修改,则抛出ConcurrentModificationException异常。

底层数组存/取元素效率非常的高(get/set),时间复杂度是O(1),而查找(比如:indexOf,contain),插入和删除元素效率不太高,时间复杂度为O(n)。

插入/删除元素会触发底层数组频繁拷贝,效率不高,还会造成内存空间的浪费,解决方案:

linkedList找元素效率不高,解决方案:HashMap(红黑树)

目录
相关文章
|
9月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
8月前
|
XML 安全 Java
Spring AOP—深入动态代理 万字详解(通俗易懂)
Spring 第四节 AOP——动态代理 万字详解!
346 24
|
5月前
|
Arthas 监控 Java
Arthas thread(查看当前JVM的线程堆栈信息)
Arthas thread(查看当前JVM的线程堆栈信息)
927 10
|
自然语言处理 Java 开发者
简单了解下Spring中的各种Aware接口实现依赖注入
【8月更文挑战第21天】在Spring框架中,Aware接口系列是一种特殊的机制,它允许Bean在初始化过程中获取到Spring容器或容器中的特定资源,从而实现了更加灵活和强大的依赖注入方式。本文将围绕Spring中的各种Aware接口,详细探讨它们如何帮助开发者在工作和学习中更好地实现依赖注入。
376 0
|
Arthas Java 测试技术
Arthas基础使用篇
Arthas基础使用篇
|
NoSQL Redis 数据安全/隐私保护
redis下载安装教程
本文介绍如何下载安装redis。
16308 0
redis下载安装教程
|
存储 Java Spring
原来使用 Spring 实现策略模式可以这么简单!
Hello,大家好,我是鸭血粉丝~ 最近看同事的代码时候,学到了个小技巧,在某些场景下非常挺有用的,这里分享一下给大家。
原来使用 Spring 实现策略模式可以这么简单!
|
人工智能 算法 大数据
峰哥读者从创业失败延毕一年,到考研985拿大厂offer,分享考研经历与经验
峰哥读者从创业失败延毕一年,到考研985拿大厂offer,分享考研经历与经验
峰哥读者从创业失败延毕一年,到考研985拿大厂offer,分享考研经历与经验
|
监控 安全 测试技术
阿里云防火墙测试调研
阿里云防火墙测试调研 一.主要功能 云防火墙是阿里云推出的公有云环境下的saas式防火墙,从产品调研和测试中,我们了解到其主要有以下几个功能 1.策略控制(南北向,东西向) 2.网络流量分析(主动外连,流量/连接等活动趋势) 3.IPS(基于内置规则的基础防御,针对高危漏洞的虚拟补丁) 4.全量日志(流量日志,操作日志) 二.功能体验 试用过程中,主要测试和验证几个核心功能当前阶段能达到的效果,以及从实用性的角度来考察能不能解决或优化公司当前面临的一些问题。
2157 0
|
5天前
|
弹性计算 人工智能 安全
云上十五年——「弹性计算十五周年」系列客户故事(第二期)
阿里云弹性计算十五年深耕,以第九代ECS g9i实例引领算力革新。携手海尔三翼鸟、小鹏汽车、微帧科技等企业,实现性能跃升与成本优化,赋能AI、物联网、智能驾驶等前沿场景,共绘云端增长新图景。