zoukankan      html  css  js  c++  java
  • Java并发编程--并发容器之Collections

      在JDK1.2之前同步容器类包括Vector、Hashtable,这两个容器通过内置锁synchronized保证了同步。后面的ArrayList、LinkedList、HashMap、LinkedHashMap等等都不是线程安全的,没有添加同步机制。但是JDK后面的Collections类也提供了这些常见容器类的同步容器类实现:将它们的状态封装起来,并对每个公共方法都进行同步,使得每次只有一个线程能访问容器状态

      在Collections这个类下面提供了一些静态类和静态方法。比如常见的同步容器类的创建方法:

    1 public static <T> List<T> synchronizedList(List<T> list);
    2 
    3 public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m);
    4 
    5 public static <T> Set<T> synchronizedSet(Set<T> s);
    6 
    7 public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m);
    8 
    9 .....

      通过这些静态方法将一个传递进去的集合包装成同步的集合。这里很明显就用到了设计模式中的装饰器模式。

      Collections同步容器类迭代的线程安全:

        如果同步容器类的数据量很大,迭代的时候占用时间较长。迭代过程中可能会出现别的线程修改了容器的数据,这样迭代的时候可能会抛出异常(比如迭代到索引最后的元素,这时候另外一个线程删除了这个元素,这时候会抛出数组越界的异常)。

        但是如果迭代过程中加锁,那么就会出现性能问题。其中一种解决方案就是克隆容器,再迭代克隆的容器。(克隆期间需要加锁),但是克隆也是耗费CPU性能的。所以没有十全十美的办法。

  • 相关阅读:
    Java EE
    C++基础学习(二)之判断
    C++基础学习(一)之循环
    AutoCAD完全卸载
    point-cloud-annotation-tool编译发烧记_UBUNTU
    Ubuntu18.04安装QT5
    Ubuntu安装VTK-8.1
    常用Latex公式代码表[持续更新]
    shp矢量文件批处理裁剪栅格影像_IDL/ENVI
    摄影测量基本原理
  • 原文地址:https://www.cnblogs.com/qjjazry/p/6581697.html
Copyright © 2011-2022 走看看