关于这个BUG分两种情况,一种情况是单线程,一种情况是多线程。
单线程
单线程出现这种事情就应该拖出去枪毙五分钟还不带同情的,作为程序员,有点常识的都知道在遍历集合的同时不能同时删除集合元素,如下面代码所示,必然产生这样的崩溃:
同样的,如下的代码也会产生崩溃:
解决办法如下:就是定义一个数组去接收要删除的元素,在外面一起remove掉,代码就不贴了。。。。。。
PS:大家仔细试试就会发现,崩溃的例子中遍历删除其实是用的迭代器,只要是迭代删除就必挂,比如foreach之类的,如果用普通for循环虽然不会挂,结果也达不到预期效果
多线程
多线程环境产生这个异常原因就是,多个线程在删除同一个集合中的元素,比如线程一在遍历,线程二在插入操作,线程三在进行删除操作,都在操作同一个集合的元素,就会产生ConcurrentModificationException异常
异常日志跟单线程的时候也差不多,就不截图了,也是报ConcurrentModificationException崩溃,解决办法呢,就是集合换成线程安全的,比如CopyOnWriteArrayList,这里大家可以多多关注concurrent包里的api,里面的api在处理多线程环境的时候很有用。