1_基础知识_chapter05_基础构建模块_2_并发容器

  • (1) 并发容器≠同步容器

    (2) 同步容器将所有对容器状态的访问都串行化,严重影响性能

    (3) 并发容器专门为多线程并发设计, 应该尽可能通过并发容器代替同步容器

    (4) 并发容器有 ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueue, ConcurrentSkipListSet等

  • ConcurrentHashMap

    (1) 同步容器在执行每个操作期间持有同一个锁, 而ConcurrentHashMap采取的加锁机制是粒度更细的分段锁(后面会讲)

    (2) 在迭代的过程中, 并发容器不会抛出ConcurrentModificationException异常, 因此不需要在迭代过程中对容器加锁

    这也导致了一个问题就是调用并发容器的size()方法时, 返回的值是一个近似值

    (3) 一些常见的复合操作已经在ConcurrentHashMap中实现, 例如"若没有则添加"、"若相等则移除"等, 所以在决定自己实现之前要先查docs

    (4) ConcurrentHashMap没有实现对自身加锁以提供独占访问, 它提供的是各个方法上的细粒度加锁

    (5) 因此, 和Hashtable, synchronizedMap相比, 在大多数情况下应该使用ConcurrentHashMap; 只有需要加锁独占Map对象时, 才放弃使用ConcurrentHashMap

  • CopyOnWriteArrayList

    (1) 使用CopyOnWriteArrayList时, 迭代期间不需要对容器加锁或复制

    (2) 实现机制是: 每次修改时都会创建并发布一个新的容器副本, 而容器的迭代器总是保留一个指向底层基础数组的引用, 这个数组不会被修改且可见

    (3) 由于修改就会造成CopyOnWriteArrayList的底层数组的复制, 因此当迭代操作远多于修改操作时, 才应该使用CopyOnWriteArrayList

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容