码迷,mamicode.com
首页 > 其他好文 > 详细

集合系列日记(17.5.10)

时间:2017-05-11 00:16:23      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:main   list   操作   new   one   就会   报错   start   rgs   

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)

标签:main   list   操作   new   one   就会   报错   start   rgs   

原文地址:http://www.cnblogs.com/levi-ji/p/6838784.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!