首页 > 代码库 > 集合系列日记(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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。