初探LinkedList线程安全问题
来源:互联网 发布:js事件委托 阮一峰 编辑:程序博客网 时间:2024/05/17 21:49
Java中LinkedList是线程不安全的,那么如果在多线程程序中有多个线程访问LinkedList的话会出现什么问题呢?
抛出ConcurrentModificationException
JDK代码里,ListItr的add(), next(), previous(), remove(), set()方法都会跑出ConcurrentModificationException。
代码中,modCount记录了LinkedList结构被修改的次数。Iterator初始化时,expectedModCount=modCount。任何通过Iterator修改LinkedList结构的行为都会同时更新expectedModCount和modCount,使这两个值相等。通过LinkedList对象修改其结构的方法只更新modCount。所以假设有两个线程A和B。A通过Iterator遍历并修改LinkedList,而B,与此同时,通过对象修改其结构,那么Iterator的相关方法就会抛出异常。这是相对容易发现的由线程竞争造成的错误。
通过LinkedList对象修改其结构
如果两个线程都是通过LinkedList对象修改其结构,会发生什么呢?我们先看一下JDK中LinkedList的数据结构。
这是一个双向循环链表。header的作用就是能快速定位链表的头和尾。
- 初探LinkedList线程安全问题
- 初探LinkedList线程安全问题
- 初探LinkedList线程安全问题(一)
- 初探LinkedList线程安全问题(一)
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- 线程安全问题
- java中判断字符串是否为数字的三种方法
- 我的js库
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
- “细妹子”老师
- BOM展开和反查函数
- 初探LinkedList线程安全问题
- mysql数据库编码
- JVM GC调整优化过程全揭秘
- 在 Linux x86 上安装 Oracle 数据库 10g
- ACE中的设计模式应用场景---模式初学者勿入
- 部是记不住的几个域名
- asp.net中时间格式化的几种方法
- 从深圳看it未来走向
- C++虚函数表解析(转)