多线程操作集合边循环迭代、边修改
迭代集合时有一些修改集合的操作
可以使用Collections.synchronizedlist()修改下集合
synchronizedlist下的方法都是被上了锁的
private List<Test> testList = Collections.synchronizedlist(new LinkedList<>());
//操作集合的时候最好使用Collections.synchronizedlist里的方法
//如果删除的时候不能使用Collections.synchronizedlist里的方法那么其他地方需要遍历集合的时候要使用for循环
//例如:
//删除方法在其他线程里
Iterator<Test> it = testList.iterator();//获取集合
while(it.hasNext()){ //迭代删除
Test test = it.next()
if(test.rem){ //符合一定条件时进行删除
it.remove();
}
}
//那么循环要使用for使用get()方法去取
for(int i = 0;i<testList.length;i++){
Test test = testList.get(i);
//操作
}
//如果使用增强for是会报错的
for(Test test:testList){
//操作
}