2020-5-14
今天,我在这篇博文 JDK1.7和JDK1.8中HashMap为什么是线程不安全的? 中,温习了 HashMap 高频的面试考点之一:为什么HashMap是线程不安全的。
总体来讲:
- 在JDK1.7版本,扩容操作中进行数据转换采用的是链表的头插法,所以会造成链表成环,CPU百分之百,也就是我们所说的死循环问题。
- 在JDK1.8版本,虽然进行了优化,直接将原链表的数据放到新的数组,不会造成死循环,但是在putval操作中,还是有可能导致数据覆盖,所以也是线程不安全的。
- 解决方法,在多线程中应该使用 ConcurrentHashMap 替代 HashMap。
网友评论