java.util.ConcurrentModificationException
public class ListTest {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
for (int i = 1; i <=10 ; i++) {
new Thread(()->{
list.add(UUID.randomUUID().toString());
System.out.println(list.toString());
},"线程"+i).start();
}
}
}
这是报ConcurrentModificationException 并发修改异常,ArrayList,hashset,hashmap在多线程下不安全。
解决ArrayList并发问题的方案
public class ListTest {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
//第一种 List<String> list=new Vector<>();
//第一种 List<String> list= Collections.synchronizedList(new ArrayList<>());
//第一种 List<String> list=new CopyOnWriteArrayList<>();
for (int i = 1; i <=10 ; i++) {
new Thread(()->{
list.add(UUID.randomUUID().toString());
System.out.println(list.toString());
},"线程"+i).start();
}
}
}
解决hashset并发问题的方案
public class ListTest {
public static void main(String[] args) {
Set<String> list=new HashSet<>();
//第一种 Set<String> list=Collections.synchronizedSet(new HashSet<>());
//第一种 Set<String> list=new CopyOnWriteArraySet<>();
for (int i = 1; i <=10 ; i++) {
new Thread(()->{
list.add(UUID.randomUUID().toString());
System.out.println(list.toString());
},"线程"+i).start();
}
}
}
解决hashmap并发问题的方案
public class ListTest {
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
//第一种 Map<String,String> map=new ConcurrentHashMap<>();
//第二种 Map<String,String> map= Collections.synchronizedMap(new HashMap<>());
for (int i = 1; i <=30 ; i++) {
new Thread(()->{
map.put(Thread.currentThread().getName(), UUID.randomUUID().toString());
System.out.println(map);
},String.valueOf(i)).start();
}
}
}