美文网首页
1_基础知识_chapter05_基础构建模块_2_并发容器

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

作者: 米都都 | 来源:发表于2019-01-22 17:54 被阅读0次
    • (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

    相关文章

      网友评论

          本文标题:1_基础知识_chapter05_基础构建模块_2_并发容器

          本文链接:https://www.haomeiwen.com/subject/hhzqjqtx.html