面试官:HashMap中的modCount变量究竟有何神秘作用,为何多数人误解其真谛?
- 内容介绍
- 文章标签
- 相关推荐
本文共计856个文字,预计阅读时间需要4分钟。
来源自:blog.csdn.net/dabusiGin/article/details/105483426 错误的结论+在网络上搜索HashMap中变量modCount的作用时,大部分解释都是:Fail-Fast机制+我们知道java.util.HashMap不是线程安全的,因此...
来源:blog.csdn.net/dabusiGin/article/details/105483426
错误的结论在网上搜索HashMap中变量modCount的作用时,大部分的解释都是这样:
Fail-Fast 机制我们知道 java.util.HashMap 不是线程安全的,因此如果在使用迭代器的过程中有其他线程修改了map,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。
这一策略在源码中的实现是通过 modCount 域,modCount 顾名思义就是修改次数,对HashMap 内容的修改都将增加这个值,那么在迭代器初始化过程中会将这个值赋给迭代器的 expectedModCount。在迭代过程中,判断 modCount 跟 expectedModCount 是否相等,如果不相等就表示已经有其他线程修改了 Map:注意到 modCount 声明为 volatile,保证线程之间修改的可见性。
本文共计856个文字,预计阅读时间需要4分钟。
来源自:blog.csdn.net/dabusiGin/article/details/105483426 错误的结论+在网络上搜索HashMap中变量modCount的作用时,大部分解释都是:Fail-Fast机制+我们知道java.util.HashMap不是线程安全的,因此...
来源:blog.csdn.net/dabusiGin/article/details/105483426
错误的结论在网上搜索HashMap中变量modCount的作用时,大部分的解释都是这样:
Fail-Fast 机制我们知道 java.util.HashMap 不是线程安全的,因此如果在使用迭代器的过程中有其他线程修改了map,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。
这一策略在源码中的实现是通过 modCount 域,modCount 顾名思义就是修改次数,对HashMap 内容的修改都将增加这个值,那么在迭代器初始化过程中会将这个值赋给迭代器的 expectedModCount。在迭代过程中,判断 modCount 跟 expectedModCount 是否相等,如果不相等就表示已经有其他线程修改了 Map:注意到 modCount 声明为 volatile,保证线程之间修改的可见性。

