LinkedList(3):并发异常

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方法会对期望值和真实值同时进行修改,所以无异常。

相关推荐
前端炒粉19 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
星释20 小时前
Rust 练习册 75:ETL与数据转换
开发语言·rust·etl
happyjoey21720 小时前
使用Qt自带的Maintenance Tool将Qt6.9升级为QT6.10
开发语言·qt
断剑zou天涯21 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
m***66731 天前
SQL 实战—递归 SQL:层级结构查询与处理树形数据
java·数据库·sql
鲸沉梦落1 天前
Java中的Stream
java
yihuiComeOn1 天前
[源码系列:手写Spring] AOP第二节:JDK动态代理 - 当AOP遇见动态代理的浪漫邂逅
java·后端·spring
p***h6431 天前
JavaScript在Node.js中的异步编程
开发语言·javascript·node.js
散峰而望1 天前
C++数组(二)(算法竞赛)
开发语言·c++·算法·github
Porunarufu1 天前
Java·关于List
java·开发语言