首页 > 代码库 > 集合系列日记(17.5.10)

集合系列日记(17.5.10)

fail-fast

fail-fast是collection的一种错误机制,当多个线程对同一个容器进行操作的时候就会产生fail-fast事件,当有两个线程a和b,当线程a对容器进行遍历时,线程b改变了容器的东西,就会进行报错.

public class Test {
    private static List<String> list=new ArrayList<String>();
    public static void main(String[]args){
        ThreadOne t1=new ThreadOne();
        ThreadTwo t2=new ThreadTwo();
        t1.start();
        t2.start();
    }
    private static void printAll(){
        System.out.println(" ");
        
        String value=null;
        Iterator iter=list.iterator();
        while(iter.hasNext()){
            value=(String)iter.next();
            System.out.print(value+",");
        }
    }
    //ThreadOne
    private static class ThreadOne extends Thread{
        public void run(){
            for(int i=0;i<6;i++){
                list.add(String.valueOf(i));
                printAll();
            }
        }
    }
    //ThreadTwo
    private static class ThreadTwo extends Thread{
        public void run(){
            for(int i=7;i<12;i++){
                list.add(String.valueOf(i));
                printAll();
            }
        }
    }
}

怎么解决多线程同时去访问呢?可以去使用java.util.concurrent包,将private static List<String>list=new ArrayList<String>;换成

private static List<String>list=new CopyOnWriteArrayList<String>();

 

集合系列日记(17.5.10)