老师,在多线程中HashMap是线程不安全的,但是从内部结构我不太清楚为什么,网上都是直接说HashMap是非synchronized

来源:3-3 线程安全性-原子性-synchronized

橙子先生0_0

2018-03-21

但是,我自己的理解是当HashMap中的数据超过了负载因子定义的容量,默认的负载因子大小为0.75,也就是说,当一个map填满了75%的,会扩容当前空间的一倍,然后将数据重新拷贝到大的空间中,那么在多线程的情况下,是不是HashMap扩容之后,另外一个线程进来了又扩容一次,重复的将小空间的数据拷贝到扩容后的空间,这样导致数据重复

写回答

2回答

Jimin

2018-03-21

你好,扩容不是这么简单,极端情况下可能出现可怕的循环列表,多线程环境下多个线程同时处理HashMap的实例很容易出现问题。

关于HashMap,我在并发编程这块的结尾部分做了详细的图例演示和讲解,这周更新的内容里差不多可以包含进来,你可以带着问题细看一下这个扩容。

如果不懂的话,我们再继续讨论一下。

祝你学习愉快~

0
1
橙子先生0_0
非常感谢!
2018-03-21
共1条回复

loubobooo

2018-04-01

我觉得你思考的也对,多线程下确实会导致数据重复

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程