在多线程情况下,使用
Set<Object> set = new HashSet<>();
会产生 java.util.ConcurrentModificationException异常
解决方式:
-
Set<Object> set = Collections.synchronizedSet(new HashSet<>());
-
Set<Object> set = new CopyOnWriteArraySet<>();
代码如下:
public static void main(String[] args) {
Set<Object> set = new HashSet<>();
// Set<Object> set = Collections.synchronizedSet(new HashSet<>());
//Set<Object> set = new CopyOnWriteArraySet<>();
for(int i = 1;i <= 100; i++){
new Thread(()->{
set.add(UUID.randomUUID().toString().substring(0,8));
System.out.println(set);
},String.valueOf(i)).start();
}
}
本文探讨了在多线程环境下使用HashSet时可能遇到的java.util.ConcurrentModificationException异常,并提供了两种解决方案:使用Collections.synchronizedSet进行同步封装或采用CopyOnWriteArraySet实现线程安全。
1857





