fail-fast 机制

简介: 标题master 集合元素个数的增加或删除,均会导致子列表的遍历、增加、删除进而产生 fail fast 异常。
public static void main (String[] args) {
List masterList = new ArrayList();
masterList . add (”one") ;'
masterList . add (” tow" );
masterList . add (” three " );
masterList . add (” four " ) ;
masterList . add (” five " ) ;
List branchList = masterList.subList( 0 , 3 ) ;
//下发三行代码,如果不注释掉则会导致branchList 操作出现异常(第一处)
//masterList . remove( 0);
//masterList . add (” ten ” );
//masterList.clear() ;
//下方四行全部能正确执行
branchList.clear() ;
branchList . add (” six " );
branchList . add (” seven” );
branchList.remove( 0);
//正常遍历结束,只有一个元素
for (Object t : branchList) {
System . out . println(t);
// 子列表修改导致住列表也被动,输出:[seven,four,five]
System out.println(masterList );

第一处说明,如果不注释掉, masterList 的任何关于元素个数的修改操作都会导branchList 的“增删改查”抛出 ConcurrentModificati onException 异常。在实际调研中
大部分程序员知道 subList 子列表无法序列化 也知道它的修改会导致主列表的修改但是并不知道主列表元素个数的改动会让子歹lj 表如此敏感,频频抛出异常。在实际代码中,这样的故障案例属于常见的类型。 subList 方法返回的是内部类 SubList 的对象SubList 类是 Array ist 的内部类, SubList 的定义如下 并没有实现序列化接口 无法网络传输:

在集合遍历时维护一个初始值为0的游标cursor,从头到尾地进行扫描,在cursor=-size时,退出遍历。如图6-2所示,执行remove这个元素后,所有元素往前拷贝,size=size-1即为2,这时 cursor也等于2。在执行hasNext()时,结果为false,退出循环体,并没有机会执行到next()的第一行代码checkForComodification(),此方法用来判断expectedModCount和 modCount是否相等,如果不相等,则抛出ConcurrentModificationException异常。

目录
相关文章
|
5月前
|
前端开发 开发者
HarmonyOS实战:自定义时间选择器
在鸿蒙开发中,官方提供的默认时间选择器可能无法满足特定需求。本文分享了自定义时间选择器的实现过程:通过 TextPicker 控件实现年月日及时分的选择,支持默认选中当前时间、精确到时分,并注意闰年计算与日期格式处理。代码中使用 Promise 处理耗时的日期计算,确保显示和逻辑正确。总结指出,尽管看似简单,但需关注时间计算、格式化等细节。快动手试试吧!
206 1
|
机器学习/深度学习 存储 安全
基于YOLOv8深度学习的复杂场景下船舶目标检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测
基于YOLOv8深度学习的复杂场景下船舶目标检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测
|
机器学习/深度学习 自然语言处理 算法
利用机器学习算法进行自动化测试
利用机器学习算法进行自动化测试
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用问题之如何实现MySQL的实时增量同步
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
247 6
|
数据采集 传感器 监控
LabVIEW与数字孪生
LabVIEW与数字孪生
194 1
|
JavaScript
[Vue] TodoList 案例(二)
[Vue] TodoList 案例(二)
|
存储 SQL 关系型数据库
MySQL快速回顾:计算字段与函数
MySQL快速回顾:计算字段与函数
|
存储 数据采集 监控
GE通用电气 IC695CPE305 PACSystem RX3i控制器模块
GE Fanuc / Emerson Automation的IC695CPE305是PACSystem RX3i控制器,具备5MB RAM和5MB非易失性存储,1.1 GHz处理器,扫描速率0.72 ms/k布尔指令。它拥有2个RS232/RS485串行端口,1个以太网口和1个USB 2.0主端口,支持以太网通信、OPC UA、多种网络协议及串行通信。适用于多机架控制和扩展通信卡。需要Proficy Machine Edition软件进行配置。推荐相关产品包括各种输入/输出模块和通讯模块。
|
数据采集 存储 人工智能
大模型能自己「写」论文了,还带公式和参考文献,试用版已上线
大模型能自己「写」论文了,还带公式和参考文献,试用版已上线
716 0
|
存储 网络协议 安全
【Docker系列】虚拟化+Docker概念(二)
【Docker系列】虚拟化+Docker概念(二)
【Docker系列】虚拟化+Docker概念(二)