为什么需要ConcurrentHashMap
由于HashMap是非同步的在多线程下将会出现线程问题,而HashTable每次操作都会,访问同步锁,效率比较低。而ConcurrentHashMap使用了锁分离技术在并发比较多的时候,效率比HashTable要高很多。
结构示例
结构简析
其中每个Segment持有一个同步锁,这样在操作的时候每个段持有自己的同步锁。提高了效率。每个Segment可以看成类似的HashTable。
几个注意的地方
- ConcurrentHashMap的读是不需要加锁的,因为,在HashEntry里的value被加上了volatile,保证每次能拿到最新的值。
- ConcurrentHashMap也是不允许出现null值或键的。
- 当数据过多需要扩容时,不会对整个ConcurrentHashMap扩容,只会对一个Segment进行扩容。