concurrenthashmap1.7和1.8
时间: 2024-09-21 07:00:21 浏览: 44
ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)
`ConcurrentHashMap`是Java集合框架中的一种线程安全的哈希表实现,它允许高效地同时读取和写入数据。从Java 1.7版本开始,`ConcurrentHashMap`作为`java.util.concurrent`包的一部分得到了增强。
**Java 1.7 版本 ConcurrentHashMap**:
- 使用了分段锁(Segmented Locking),将大表划分为多个较小的部分,并对每个部分独立加锁,这提高了并发性能,尤其是在大量线程操作时。
- 支持`weak keys`和`soft values`,即弱引用键和软引用值,当内存不足时会自动清理不再强关联的对象。
- 当缓存容量达到阈值时,默认采用“温和”的扩容策略,而不是立即扩大容量,减少了扩容带来的性能影响。
**Java 1.8 版本 ConcurrentHashMap**:
- 在保持原有特性的同时,进一步优化了内部数据结构,如引入了`ReentrantLock`代替之前的` synchronize()`,锁粒度更细,可以减少死锁风险。
- 引入了`eviction`算法(默认是 `Local搬移`),当缓存满时,会尝试迁移部分数据到其他分段,而不是直接拒绝插入新元素。
- 对于`putIfAbsent()`等条件写入操作,增加了无锁支持,提升了并发性能。
- 保留了`weak keys`和`soft values`功能。
阅读全文