Hashmap在1.7和1.8的情况下为啥线程不安全
时间: 2023-06-17 08:04:56 浏览: 126
HashMap-面试必过
在JDK 1.7及之前,HashMap的实现是基于链表的,当不同的键映射到同一个桶上时,它们会被放置在链表的不同节点上。由于每个桶都是一个链表,因此在并发环境下,如果多个线程同时修改同一个桶上的不同节点,就会出现不一致的情况,导致HashMap线程不安全。
在JDK 1.8中,HashMap的实现引入了红黑树,当链表长度超过一定阈值时,链表会被转换为红黑树。红黑树的插入、删除和查找操作都是基于CAS操作,具有原子性,所以并发环境下HashMap的线程安全性得到了提升。但是,在并发修改HashMap的结构时,仍然需要进行同步处理,因为在结构修改时可能会出现树的旋转、链表的转换等操作,这些操作并不是原子的。因此,HashMap在并发环境下仍然需要进行同步处理,或者使用线程安全的ConcurrentHashMap。
阅读全文