ConcurrentHashMap

在三种并发类型中(Concurrent,CopyOnWrite,queue),今天我去看了下ConcurrentHashMap. 众所周知,我们可以在单线程时使用HashMap提高效率,而多线程时用Hashtable来保证安全。 但是hashtable对于同步的设置不是很人性化。通过分析Hashtable就知道,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,安全的背后是巨大的浪费,解决方案----ConcurrentHashMap。 ConcurrentHashMap和Hashtable主要区别就是围绕着锁的粒度以及如何锁。

左边便是Hashtable的实现方式---锁整个hash表;而右边则是ConcurrentHashMap的实现方式---锁桶(或段)。ConcurrentHashMap将hash表分为16个桶(默认值),诸如get,put,remove等常用操作只锁当前需要用到的桶。试想,原来只能一个线程进入,现在却能同时16个写线程进入(写线程才需要锁定,而读线程几乎不受限制,之后会提到),并发性的提升是显而易见的。 ConcurrentHashMap中主要实体类就是三个:ConcurrentHashMap(整个Hash表),Segment(桶),HashEntry(节点),对应上面的图可以看出之间的关系。

  这边这个segment里面就是对应一个hashtable!

posted @ 2013-04-07 11:50  clunyes  阅读(192)  评论(0编辑  收藏  举报