集合

269 阅读1分钟

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/…