栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ArrayList是线程安全的吗?及介绍几种线程安全的List?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ArrayList是线程安全的吗?及介绍几种线程安全的List?

ArrayList不是线程安全的。

  1. 如果使用ArrayList的for-each方法遍历元素,则会出现checkModificationException。原因是:for循环中的remove()方法会改变修改次数modCount,遍历时的next()方法也会改变修改次数modCount。此时,判断modCount与expectmodCount不一致,则抛出异常。
  2. 将list修改为CopyOnWriteArrayList则可以正常运行。
  3. 如果遍历列表list时,使用ArrayList 的迭代器Iterator是支持remove的。
public class testIterator {
    public static void main(String[] args) {
        // 1.报异常
        // 用for-each循环遍历则会出错
        // checkModificationException 修改次数不一致
        
		
		// 2.将list修改为CopyOnWriteArrayList则可以正常运行。
		// 因为CopyOnWriteArrayList是线程安全的。
		



        // 3.
        // 任何在获取迭代器之后,再对CopyOnWriteArrayList的修改将不会及时反映到迭代器里
        // 即迭代遍历到的还是原有列表里面的数据
        


        // 4.
        // ArrayList 的迭代器Iterator是支持remove的
        List list = new ArrayList();
        list.add("沉默王二");
        list.add("沉默王三");
        list.add("一个文章真特么有趣的程序员");
        Iterator var3 = list.iterator();

        while (var3.hasNext()) {
            String str = (String) var3.next();
            if ("沉默王二".equals(str)) {
                var3.remove();
            }
        }
        System.out.println(list);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293250.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号