zoukankan      html  css  js  c++  java
  • 如何实现 List 集合的线程安全

      在实际项目开发中,List 集合较为常用,相比于数组,其提供了更多的方法,便于遍历、搜索、添加与移除。常见的有 ArrayList、Vector等。

       关于ArrayList

      中所周知,ArrayList不是线程安全的,在多线程开发时,我们不能采取多个线程同时操作 ArrayList,比如我们不能一个线程向 ArrayList中添加元素,一个线程从其中 删除元素,这时会抛ConcurrentModificationException异常。关于这个异常,在上一篇博文中,也有涉及,具体可见:https://www.cnblogs.com/Demrystv/p/11494316.html

      关于Vector

      Vector是线程安全的,但是其比较笨重,看其源码发现其只是在每个方法上 加上 synchronized 关键字,因此虽然其可以保证线程安全,但是效率低下,在实际开发中不推荐使用。

      

      

      

       关于Collections.synchronizedList(List list)

      其使用方法如下, List<String> list = Collections.synchronizedList(new ArrayList<>());  在使用 Collections.synchronizedList(List list) 时,可以像 普通的 ArrayList 那样添加元素,但是在多线程开发中,对其进行遍历,需要添加 synchronized 关键字,这是为什么呢?还是老规矩----看源码!!!

          

      看源码截图中,蓝色框中关于 add、index 等方法中都是带有synchronized 关键字,但是在 iterator 中没有synchronized 关键字,因此上面的疑问迎刃而解!!

  • 相关阅读:
    bzoj4517 [Sdoi2016]排列计数
    bzoj1415 [Noi2005]聪聪和可可
    两个系列的书
    陈天权:数学分析教学中学到的和想到的
    广义范德蒙德行列式计算
    蒙特卡罗方法入门
    LaTeX 文字带边框
    LaTeX算法排版
    常用工具
    常用算法
  • 原文地址:https://www.cnblogs.com/Demrystv/p/11494481.html
Copyright © 2011-2022 走看看