-
(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_并发容器
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...