zoukankan      html  css  js  c++  java
  • 多线程情况下ArrayList 如何解决线性安全问题

    问题:众所周知ArrayList是非线程安全的,在多线程的情况下,向list插入数据的时候,可能会造成数据丢失的情况.
      并且一个线程在遍历List,另一个线程修改List,会报ConcurrentModificationException(并发修改异常)错误.
      1.用老的Vector集合
      2.使用Collections.synchronizedList。它会自动将我们的list方法进行改变,最后返回给我们一个加锁了List
        protected static List<Object> arrayListSafe2 = Collections.synchronizedList(new ArrayList<Object>());

    Collections.synchronizedList使用方法

    List<String> list = Collections.synchronizedList(new ArrayList<String>());
    list.add("1");
    list.add("2");
    list.add("3");
    
    synchronized (list) {
        Iterator i = list.iterator(); // Must be in synchronized block
        while (i.hasNext()) {
            //foo(i.next());
            System.out.println(i.next());
        }
    }

    为什么add()不需要synchronized,而遍历的时候需要加synchronized?

      因为add()等方法的时候是加了synchronized关键字的,但是listIterator(),iterator()却没有加.所以在使用的时候需要加上synchronized.

  • 相关阅读:
    前端html
    后端Django和前段vue.js结合 快速搭建框架
    机器学习——matplotlib
    机器学习——pandas
    机器学习——概念
    机器学习——numpy
    django创建项目流程
    django2.0中配置文件的配置
    django项目的大致流程
    django中的数据库
  • 原文地址:https://www.cnblogs.com/jiuya/p/13806498.html
Copyright © 2011-2022 走看看