1.HashTable 使用一把锁(锁住整个链表结构)处理并发问题,多个线程竞争一把锁,容易阻塞
2.ConcurrentHashMap
- JDK 1.7 中使用分段锁(ReentrantLock + Segment + HashEntry),相当于把一个 HashMap 分成多个段,每段分配一把锁,这样支持多线程访问。锁粒度:基于 Segment,包含多个 HashEntry。
- JDK 1.8 中使用 CAS + synchronized + Node + 红黑树。锁粒度:Node(首结点)(实现 Map.Entry)。锁粒度降低了。
本文探讨了HashTable和ConcurrentHashMap在不同JDK版本中的实现变化。HashTable采用单一锁机制导致并发性能瓶颈;ConcurrentHashMap在JDK1.7通过分段锁提高并发能力,在JDK1.8则引入CAS和synchronized结合红黑树进一步优化锁粒度。
1915

被折叠的 条评论
为什么被折叠?



