list(不安全)
并发修改异常
java.util.ConcurrentModificationException
导致原因
ArrayList底层没有加锁,它实现了并发性,但是无法保证安全性
解决方案。
(1)使用Vector
(2)使用Collections.synchronizedList(new ArrayList<>());
Vector(JDK 1.0),底层加了锁,能够保证多线程的安全性,但是舍弃了并发性
ArrayList(JDK 1.2),底层没加锁,实现了并发性,但是无法保证安全性
安全性:
List<String> list = new CopyOnWriteArrayList<>();
//Collections.synchronizedList(new ArrayList<>());//同步集合:安全
//new Vector<>(); //安全
//ArrayList<String>(); //不安全
set
底层原理
HashSet的底层数据结构就是HashMap;
HashSet调用add方法的时候,底层就是在HashMap里面存了一个键为add方法的参数,值为一个常量(PRESENT)的键值对。
安全性
//set
Set<Integer> set = new CopyOnWriteArraySet<>(); //安全
// Collections.synchronizedSet(new HashSet<>());//安全
// new HashSet<>(); //不安全
Map
安全性:
//map
Map<Integer, Integer> map = new ConcurrentHashMap<Integer, Integer>();//安全
// Collections.synchronizedMap(new HashMap<>());//安全
// new HashMap<>();//不安全
// new HashTable();//安全