并发场景下的FailFast机制详解

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数据的时候如果出现数据安全问题会直接抛异常。

经验分享 程序员 微信小程序 职场和发展