rehash讲解疑问
来源:9-4 HashMap与ConcurrentHashMap解析
![](http://img1.sycdn.imooc.com/user/564b3a3e00016c7f01000100-100-100.jpg)
qq_灬Mamba磊_0
2018-11-20
两个线程并发执行rehash的时候。 线程1为什么会将key为5的next设置为key为9的呢 那不是扩容前 单线程执行时的操作嘛
写回答
1回答
-
Jimin
2018-11-21
你好,线程的执行是依赖于cpu按照时间片调度的,因此可能会出现一个线程执行一个时间片后,切换到另一个线程执行的情况。在这个大背景下再去看对于同一个hashmap对象,如果是多个线程都要执行rehash时,如果线程1执行到某一步,切换到线程2去执行,这时就会按照线程2的流程去执行,而线程2要操作的数据又被线程1做了些调整,这样就可能会引发线程不安全的问题。
因此呢,线程不安全的问题不一定肯定出现,需要并发达到一定程度才可能出现。对于是否线程安全,也要考虑多个线程交替执行的问题。012018-12-20
相似问题