多线程iterator修改ArrayList为何没有抛出ConcurrentModificationException异常?

http://www.cnblogs.com/skywan...

这里说第一个程序会抛出ConcurrentModificationException异常
但是我用eclipse运行,发现并没有抛出ConcurrentModificationException异常
结果是

0,
0, 1,
0, 1, 2,
0, 1, 2, 3,
0, 1, 2, 3, 4,
0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 10,
0, 1, 2, 3, 4, 5, 10, 11,
0, 1, 2, 3, 4, 5, 10, 11, 12,
0, 1, 2, 3, 4, 5, 10, 11, 12, 13,
0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14,
0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15,

怎么回事?

阅读 3.8k
3 个回答

ArrayList本来就不是线程安全的,你可以用Collections.synchronizedList()返回的List试一下

本例中,分别测试 ArrayList 和 CopyOnWriteArrayList 这两种情况。ArrayList 会产生 fast-fail 事件,而 CopyOnWriteArrayList 不会产生 fast-fail 事件。

使用 ArrayList 时,会产生 fast-fail 事件,抛出 ConcurrentModificationException 异常;定义如下:

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

使用时 CopyOnWriteArrayList,不会产生 fast-fail 事件;定义如下:

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

设置100000000大些就抛异常了。。。

多线程用CopyOnWriteArrayList或者ThreadLocal放ArrayList

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题