ConcurrentHashMap
1. 问题出现原因
- modCount != expectedModCount
2. 问题规避
- 使用copyOnWriteArrayList(线程安全);
- 使用Iterator来遍历;
3. 代码
package com.hgq.common.collections;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class ConcurrentModifyExceptionTest {
List<Integer> list = new ArrayList<>();
{
list.add(1);
list.add(2);
list.add(3);
}
@Test
public void test1() {
for (Integer integer : list) {
System.out.println(integer);
list.remove(integer);
}
}
@Test
public void test1Solution1() {
List<Integer> copyOnWriteArrayList = new CopyOnWriteArrayList(list);
for (Integer integer : copyOnWriteArrayList) {
System.out.println(integer);
list.remove(integer);
}
}
@Test
public void test1Solution2() {
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
int value = iterator.next();
if(3 > value) {
iterator.remove();
continue;
}
System.out.println(value);
}
}
}