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异常。

目录
相关文章
|
9月前
|
Java 容器
Iterator_fail-fast和Iterator_fail-safe~
Iterator_fail-fast和Iterator_fail-safe~
|
2月前
|
安全 Java 容器
浅谈从fail-fast机制到CopyOnWriteArrayList使用
浅谈从fail-fast机制到CopyOnWriteArrayList使用
21 0
|
9月前
|
Java
什么是fail-fast
什么是fail-fast
31 0
|
9月前
|
监控 安全
故事会【Fail-safe和Fail-fast】
故事会【Fail-safe和Fail-fast】
|
11月前
|
安全 Java 容器
什么是fail-fast和fail-safe?
本章讲解了什么是fail-fast和fail-safe,以及如何解决
80 0
|
12月前
|
Java
【Java】从源码分析fail-fast和fail-safe是如何产生的
【Java】从源码分析fail-fast和fail-safe是如何产生的
57 0
|
Java API
Java - Java集合中的快速失败Fail Fast 机制
Java - Java集合中的快速失败Fail Fast 机制
61 0
|
安全 Java
fail-safe 和 fail-fast 硬核解析,让你和面试官多聊十分钟!
简介 java.util 包下的 属于 fail-fast , 快速失败~ 😝 java.util.concurrent 包下的 属于 fail-safe ,安全失败~ 😝 简单来说 就是 fail-fast 在迭代时,如果发现 该集合数据 结构被改变 (modCount != expectedModCount),就会 抛出 ConcurrentModificationException 小伙伴们可以参考下 下面的代码简单实验一下~ 😋 fail-fast 实验代码 实验对象是 Hashtable,这里采用 jdk1.7 的写法 ~ 因为博主还在研究 下文
162 0
Java fail-fast 机制
fail-fast 机制,即快速失败机制,是 Java 集合(Collection)中的一种错误检测机制,检测在迭代期间集合被修改的情况。fail-fast 机制并不保证在不同步的修改下一定会抛出异常,它只是尽最大努力去抛出,所以这种机制一般仅用于检测 bug。
Java fail-fast 机制

热门文章

最新文章