并发踩坑:list共享变量的addAll

背景:

某业务报错了,提示:Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.util.ConcurrentModificationException

分析:

        这是执行查询时报的 并发修改异常。大概逻辑是在多线程场景下,有一个共享变量list对象,每个线程都对它执行addAll操作。导致MySQL查询语句执行的时候,这个list还在并发修改,所以抛出的错误。

public void restList() {Thread thread1 = new Thread("线程1"){@Overridepublic void run() {innerSide();}};thread1.start();Thread thread2 = new Thread("线程2"){@Overridepublic void run() {innerSide();}};thread2.start();                }public void innerSide(){List<String> list = nacos.getList();//List<String> list = new ArrayList<>();List<String> querys = mapper.selectList(queryWrapper);if(CollectionUtils.isNotEmpty(querys)){list.addAll(querys);}System.out.println(Thread.currentThread().getName() +JSONObject.toJSONString(list));List<Object> objectList = otherMapper.queryList(list);
}

代码逻辑如上所示,大概就是多个线程并发执行,调用innerSide()方法,但是这个方法里的list,是从nacos上读到的。所以list变量指向的是一个共享的引用地址。所以后续对list进行 addAll操作,每个线程都执行一次。导致list里的值呈指数级别增长。导致后边代码 otherMapper.queryList()方法执行的时候,mybatis报错并发修改。

修改:

        list改成new的方式,不要用共享变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BigQuery Clustered Table 简介 - 聚簇表

Clustered Table的定义 聚簇可以提高某些类型的查询&#xff08;例如&#xff0c;使用过滤条件子句的查询和聚合数据的查询&#xff09;的性能。当通过查询作业或加载作业将数据写入聚簇表时&#xff0c;BigQuery 会使用聚簇列中的值对这些数据进行排序。这些值用于将数据整理…

Springboot2.6以下版本对cookie的samesite设置的通用方法

通过安全扫描工具对spring技术栈开发的应用进行漏洞检查时&#xff0c;通常会扫描出关于cookie相关的漏洞&#xff0c;其中一个是: Cookie without SameSite attribute&#xff0c;对于其描述通常如下: When cookies lack the SameSite attribute, Web browsers may apply di…

web3风险投资公司之Electric Capital

文章目录 什么是 Electric CapitalElectric团队 Electric Capital 开发者报告参考 什么是 Electric Capital 官网&#xff1a;https://www.electriccapital.com/ 官方github&#xff1a;https://github.com/electric-capital Electric Capital 是一家投资于加密货币、区块链企…

【Qt】qDebug() 输出16进制数的几种方法

Qt qDebug() 输出16进制数字的几种方法整理&#xff1a; 1. 代码 qDebug() << Qt::hex << Qt::showbase << 5;qDebug() << QString::number(5, 16);qDebug() << (void *) 5;qDebug() << QString("%1").arg(5, 0, 16);qDebug() …

编译安装PHP5.6

PHP&#xff1a;安装PHP5.6 yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel lib…

【VB测绘程序设计】案例11—坐标正算的计算案例(附源码)

【VB测绘程序设计】案例11—坐标正算的计算案例(附源码) 文章目录 前言一、界面预览二、程序介绍三、程序源代码总结前言 ` VB程序在测绘领域应用广泛,能够解决一些常见的简单的计算问题,提高工作效率,本专栏持续更新常用的测绘计算,感谢关注。 坐标正算是已知边长和方位…

【Linux】进程管理

ps&#xff1a;报告当前进程快照。top&#xff1a;显示任务。kill&#xff1a;给一个进程发送信号。shutdown&#xff1a;关机或重启系统。 一个程序可以发动另一个程序被表述为一个父进程可以产生一个子进程&#xff0c;内核维护每个进程的信息&#xff0c;以此来保持事情有序…

git拉取远程分支到本地

场景一&#xff1a; 需要与远程分支建立映射关系 通常用于在另一台电脑上要使用自己的分支 git checkout -b 本地分支名xxx origin/远程分支名xxx这种方式会在本地仓库新建分支xxx&#xff0c;并自动切换到新建的分支xxx&#xff0c;远程分支xxx的代码也拉去到了本地分支xxx中。…

基于YOLOv8深度学习的200种鸟类智能检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

DQL-基本查询

概念&#xff1a; 1&#xff0c;数据库管理系统一个重要功能就是数据查询&#xff0c;数据查询不应只是简单返回数据库中存储的数据&#xff0c;还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示 2&#xff0c;MySQL提供了功能强大、灵活的语句来实现这些操作 3…

Unity手机移动设备重力感应

Unity手机移动设备重力感应 一、引入二、介绍三、测试成果X Y轴Z轴横屏的手机&#xff0c;如下图竖屏的手机&#xff0c;如下图 一、引入 大家对重力感应应该都不陌生&#xff0c;之前玩过的王者荣耀的资源更新界面就是使用了重力感应的概念&#xff0c;根据手机的晃动来给实体…

Jmeter接口程序项目实战教程

1.什么是jmeter&#xff1f; JMeter是100%完全由Java语言编写的&#xff0c;免费的开源软件&#xff0c;是非常优秀的性能测试和接口测试工具&#xff0c;支持主流协议的测试 2.jmeter能做什么&#xff1f; JMeter是100%完全由Java语言编写的软件性能测试的GUI的测试工具&am…

centos安装apache2 https php

centos安装apache2 httpsphp apache2的安装包叫httpd apche2下的配置文件都在/etc/httpd/conf。例如&#xff1a;httpd.conf是http的配置文件。php.conf是php的配置文件。ssl.conf是https的配置文件。 1, 安装 有时候安装anaconda的时候是顺带安装了httpd的。 yum list in…

pandas读取Excel表 提取手机号码

需求&#xff1a;在Excel表中&#xff0c;某一个单元格内有姓名、身份证号码、住址等信息&#xff0c;要将手机号码单独提取出来。 问题&#xff1a;有的单元格内没有手机号码&#xff0c;需要打印空行。而且还要考虑手机号码现在有13、14、15、16、17、18、19开头的。 模拟数…

基于协同过滤的电影评论数据分析与推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目介绍 随着社会的发展&#xff0c;人们生活水平的提高&#xff0c;欣赏电影逐渐成为人们闲暇时的主要娱乐方式之一。本文电影推荐系统是为了给顾客提供方便快捷的热门电影推荐以及查询电影资讯而建立的&…

tomcat 优化

Tomcat安全优化 1、修改telnet 管理端口8005&#xff0c;和shutdown命令为dangerous 2、修改默认的ajp 8009端口为不易冲突的大于1024端口&#xff1b; 3、通过iptables规则限制ajp端口访问的权限仅为线上机 4、 删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文件&#xf…

供应链 | 顶刊MSOM论文精选——关税对全球供应链网络配置的影响:模型、预测和未来研究

编者按 关税对企业全球供应链网络设计决策的影响 本文为 M&SOM期刊20周年特邀论文&#xff0c;原文信息&#xff1a; Lingxiu Dong, Panos Kouvelis (2020) Impact of Tariffs on Global Supply Chain Network Configuration: Models, Predictions, and Future Research…

模式识别与机器学习(八):决策树

1.原理 决策树&#xff08;Decision Tree&#xff09;&#xff0c;它是一种以树形数据结构来展示决策规则和分类结果的模型&#xff0c;作为一种归纳学习算法&#xff0c;其重点是将看似无序、杂乱的已知数据&#xff0c;通过某种技术手段将它们转化成可以预测未知数据的树状模…

SkinEngine皮肤怎么给项目的所有窗体

C# 给winfrom窗体添加皮肤控件SkinEngine怎么给整个项目换皮怎么给winform的按钮添加统一样式怎么使用样式表给winform所有按钮添加统一样式SkinEngine皮肤怎么给项目的所有窗体 如何快速给C# winform添加好看的皮肤C# Winform中窗体的美化 SkinEngine的应用 皮肤控件换肤素材…

hdfs.DataStreamer: Exception in createBlockOutputStream XXXXX

报错信息&#xff1a; java.io.IOException: Got error, statusERROR, status message , ack with firstBadLink as 192.168.100.13:9866at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.checkBlockOpStatus(DataTransferProtoUtil.java:134)at org.a…