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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值