我们对一个对象的list或者map进行删除操作时,可能会这么写
for(Distributor distributor:distributorList){ String distributorShort = distributor.getDistributorShort(); if(!MyString.isNoEmpty(distributorShort)||distributorShort.toUpperCase().indexOf(queryDistributorNameShowDis)==-1){ distributorList.remove(distributor); } }
但是执行时,会出现一个线程问题的异常 Exception in thread "main" java.util.ConcurrentModificationException ,不能这么删除
这个异常产生的原因有几个。
一是直接对集合调用删除操作而不是在枚举器上。
二是不同的线程试图对集合进行增删操作的时候。
解决办法就是用Iterator,就不会报这个异常了。
Iterator<Distributor> it = distributorList.iterator(); while(it.hasNext()){ Distributor distributor = it.next(); String distributorShort = distributor.getDistributorShort(); if(!MyString.isNoEmpty(distributorShort)||distributorShort.toUpperCase().indexOf(queryDistributorNameShowDis)==-1){ it.remove(); } }