HashMap为什么线程不安全

来源:互联网 发布:linux内网穿透 编辑:程序博客网 时间:2024/05/16 09:03

hash碰撞与扩容导致

通过Entry内部的next变量可以知道使用的是链表,这时候我们可以知道,如果多个线程,在某一时刻同时操作HashMap并执行put操作,而有大于两个key的hash值相同,如图中a1、a2,这个时候需要解决碰撞冲突,而解决冲突的办法上面已经说过,对于链表的结构在这里不再赘述,暂且不讨论是从链表头部插入还是从尾部初入,这个时候两个线程如果恰好都取到了对应位置的头结点e1,而最终的结果可想而知,a1、a2两个数据中势必会有一个会丢失,如图所示:


还有就是rehash的时候会导致出错。具体见

谈谈HashMap线程不安全的体现