ArrayList
该集合类是线程不安全的。如果想要实现线程安全有如下方案:
1. new Vector<>();(所有的方法上都加synchronize)
2. Collections.synchronizedList()(所有的方法内部都加synchronize)
3. juc下的new CopyOnWriteArrayList<>()
CopyOnWriteArrayList的add方法
public boolean add(E e) {
synchronized (lock) {
Object[] es = getArray();
int len = es.length;
es = Arrays.copyOf(es, len + 1);
es[len] = e;
setArray(es);
return true;
}
}
HashSet
该集合类是线程不安全的。如果想要实现线程安全有如下方案:
1. juc下的new CopyOnWriteArraySet<>() 底层是CopyOnWriteArrayList<>()
HashMap
该集合类是线程不安全的。如果想要实现线程安全有如下方案:
1. juc下的new ConcurrentHashMap<>() 分段锁
hashMap hashTable concurrentHashMap 参考链接:www.cnblogs.com/heyonggang/…