concurrenthashmap 1.7和1.8的区别
时间: 2023-09-07 15:18:24 浏览: 98
ConcurrentHashMap 在 Java 1.7 和 Java 1.8 中都有所改进,但是改进的方向和重点略有不同。
1.7 版本中的改进:
1.1 分段锁的粒度更细:在 1.7 版本中,ConcurrentHashMap 中的 Segment 数量由原先的固定值 16 调整为可根据实际需要动态调整。
1.2 存储结构优化:在 1.7 版本中,ConcurrentHashMap 中的链表长度超过一定阈值时,会将链表转化为红黑树,以提高查找效率。
1.3 改进了迭代器:在 1.7 版本中,ConcurrentHashMap 的迭代器支持弱一致性,可以在迭代过程中反映出 Map 中的最新数据,但是不保证迭代结果的完全正确性。
1.8 版本中的改进:
1.1 数组扩容优化:在 1.8 版本中,ConcurrentHashMap 中的数组扩容时采用了 CAS 操作和 Unsafe 类的相关方法来实现,从而避免了多个线程同时扩容导致的性能下降。
1.2 实现了基于 CAS 的更新操作:在 1.8 版本中,ConcurrentHashMap 的 putIfAbsent、remove、replace 等操作不再使用锁,而是使用基于 CAS 的操作来实现。
1.3 改进了计算 hash 值的方法:在 1.8 版本中,ConcurrentHashMap 中计算 hash 值的方法进行了优化,使用了类似于 HashMap 的方式来实现,提高了并发效率。
总之,ConcurrentHashMap 在不同版本中的改进主要涉及到分段锁、存储结构、迭代器、数组扩容、CAS 操作等方面。1.8 版本相比于 1.7 版本,更加注重利用 CAS 操作来提高并发效率,同时也对其他细节进行了优化。
阅读全文