今天在运行Android代码,发现程序崩溃了,发现错误为“java.util.ConcurrentModificationException ”,错误栈在list里面。
然后,看异常变量,为list本身错误。
笔者马上想起来了,list和vector 的区别:
1)list是非线程安全的,vector是线程安全的。
2)这造成list本身比vector操作更快,但也更不安全。
马上想到用vector替换list。
然后,发现还是有问题,提示如下:
java.util.ConcurrentModificationException
at java.util.Vector$Itr.checkForComodification(Vector.java:1200)
找到了相关资料,发现资料如下:
(1)https://www.jianshu.com/p/813b7a3f2066
(2)https://blog.csdn.net/chengliang0315/article/details/78731941
大意是说,vector也可以产生该错误,为 “modCount != expectedModCount”时产生。
笔者想了想,既然是多线程同步造成的,那就加上同步即可;可以还是用原来的list。于是,进行如下同步:
在代码块上加上synchronized,形如:
synchronized(list) {
//正式代码
}
然后,问题解决。