Java集合--ConcurrentHashMap

ConcurrentHashMap,HashTable,TreeMap,LinkedHashMap


ConcurrentHashMap

ConcurrentHashmap与HashMap相似,其特点有:

  • 支持并发操作,是线程安全的
  • 采用了分段锁(Segment锁),来实现并发操作。

ConcurrentHashMap包括多个Segment段,相当于Segment数组,每个Segment继承了ReentrantLock来进行加锁,每次锁操作锁住的是一个Segment,于是一个线程在读写某个Segment时,该Segment上锁,保证了线程的安全,同时其他的线程可以读写没被上锁的Segment,实现了多线程的并发操作。

concurrencyLevel: 并发数,Segment数。表示ConcurrentHashMap中包含的Segment数量,默认值是16.

也就是最多同时支持16个线程的写操作。并发数可以在初始化时设置,一旦初始化后不能扩容。

Java8中ConcurrentHashMap也引入了红黑树,每个Segment的实现与HashMap类似。

ConcurrentHashMap的方法与HashMap基本相同,详见HashMap用法


HashTable

HashTable是遗留的类,功能与HashMap类似,是线程安全的,同一时间只有一个线程能写,并发性不如ConcurrentHashMap。

不建议使用HashTable,可以用HashMap和ConcurrentHashMap代替。


TreeMap

TreeMap实现了SortedMap接口,能够根据键值排序,默认按键值升序排序。

也可以指定排序的比较器。

使用TreeMap时,key要实现Comparable接口或者传入自定义的Comparator比较器,也就是key要能够比较都行,否则报错。


LinkedHashMap

在HashMap的基础上,记录了元素插入的顺序,因此其遍历顺序与插入顺序是相同的。


版权声明:本文为Sungree原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。