1 LinkedList并发异常
package com.example.demo;import java.util.Iterator;
import java.util.LinkedList;public class TestLinkedList {public static void main(String[] args) {LinkedList linkedList = new LinkedList(); //双向链表linkedList.add(11);linkedList.add(22);linkedList.add(33);//nextIndex : 0 next 第一号节点元素//lastReturned 记录返回值的对象// private int expectedModCount = modCount; 将记录链表长度发生变化次数的记录值赋值给 期望值 -> 程序在初始化的时候,那么他们一定是相等的Iterator iterator = linkedList.iterator();while (iterator.hasNext()){linkedList.add(10);System.out.println(iterator.next());}System.out.println(linkedList);}
}
在查询的时候进行插入,报错如下:
因为在linklist初始化的时候,期望值expectedModCount和真实值modCount是一样的,而进行add()方法以后就不一样了。
如下图,只改变了modCount的值。
2 测试并发修改异常
package com.example.demo;import java.util.LinkedList;
import java.util.ListIterator;public class TestLinkedList {public static void main(String[] args) {LinkedList linkedList = new LinkedList(); //双向链表linkedList.add(11);linkedList.add(22);linkedList.add(33);//nextIndex : 0 next 第一号节点元素//lastReturned 记录返回值的对象// private int expectedModCount = modCount; 将记录链表长度发生变化次数的记录值赋值给 期望值 -> 程序在初始化的时候,那么他们一定是相等的ListIterator iterator = linkedList.listIterator();while (iterator.hasNext()){//hashNext 遍历链表长度的次数iterator.add(10);System.out.println(iterator.next());}System.out.println(linkedList);}
}
结果如下:
这个add方法会对期望值和真实值同时进行修改,所以无异常。