FailFast机制
快速失败机制,是java集合类应对并发访问在对集合进行迭代过程中,内部对象结构发生变化一种防护措施.这种错误检测的机制为这种有可能发生错误,通过抛出java.util.ConcurrentModificationException
package com.gupao.arraylist;
import java.util.Iterator;
import java.util.List;
public class ThreadIterate extends Thread {
private List list;
public ThreadIterate(List list){
this.list = list;
}
@Override
public void run() {
while(true){
for (Iterator iteratorTmp = list.iterator();iteratorTmp.hasNext();) {
iteratorTmp.next();
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
package com.gupao.arraylist;
import java.util.List;
public class ThreadAdd extends Thread{
private List list;
public ThreadAdd(List list){
this.list = list;
}
public void run(){
for (int i = 0; i < 100; i++) {
System.out.println("loop execute : " + i);
try {
Thread.sleep(5);
list.add(i);
}catch (Exception e){
}
}
}
}
package com.gupao.arraylist;
import java.util.ArrayList;
import java.util.List;
public class ThreadMain {
private static List list = new ArrayList();
public static void main(String[] args) {
new ThreadAdd(list).start();
new ThreadIterate(list).start();
}
}
效果
原因:
这是就ArrayList的failFast机制,也就是在多线程操作一个List数据的时候如果出现数据安全问题会直接抛异常。