背景:
某业务报错了,提示: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"){
@Override
public void run() {
innerSide();
}
};
thread1.start();
Thread thread2 = new Thread("线程2"){
@Override
public void run() {
innerSide();
}
};
thread2.start();
}
public void innerSide(){
List<String> list = nacos.getList();
//Lis

文章描述了一种在多线程场景中,由于共享变量list并发修改引发的MyBatis查询错误。解决方法是将list改为线程局部的新实例,避免共享引用导致的数据不一致。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



