HashMap线程安全吗 底层结构是什么? CurrentHashMap实现是什么? CAS是啥? ABA问题是什么? JDK8以前解决hash冲突为什么要头插?
时间: 2023-12-24 11:05:31 浏览: 115
HashMap并不是线程安全的,因为在并发环境下多个线程可以同时修改HashMap导致数据不一致。HashMap的底层结构是数组+链表(数组中的每个元素存储链表的头结点),用于存储键值对。ConcurrentHashMap的实现采用的是分段锁的方式,将数据分成多个Segment(默认为16个),每个Segment都有自己的锁,不同线程可以同时访问不同的Segment,从而提高并发性能。CAS(Compare And Swap)是一种非阻塞算法,用于实现并发操作。ABA问题是指在利用CAS进行线程安全操作时,可能会出现一个值从A变为B再变回A的情况,导致操作结果出现异常。JDK8以前解决hash冲突要头插是因为此时该元素会成为链表的头节点,可以提高查找效率。
阅读全文