同步集合和并发集合
同步集合类:Hashtable、Vector 方法上有同步约束 (jdk1.0)
同 步 集 合 包 装 类 : Collections.synchronizedMap(new HashMap<>()) 和Collections.synchronizedList(new ArrayList<>()) —使用的是全局锁
并发集合类:ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteHashSet
性能比较
同步集合比并发集合会慢得多,主要原因是锁,同步集合会对整个 Map 或 List 加锁
并发集合的实现原理
ConcurrentHashMap[jdk1.7]把整个 Map 划分成几个片段,只对相关的几个片段上锁,同时允许多线程访问其他未上锁的片段。CopyOnWriteArrayList 允许多个线程以非同步的方式读,当有线程写的时候它会将整个List 复制一个副本给它。如果在读多写少这种对并发集合有利的条件下使用并发集合,这会比使用同步集合更具有可伸缩性。
并发集合的使用建议一般不需要多线程的情况,只用到 HashMap、ArrayList,只要真正用到多线程的时候就一定要考虑同步。所以这时候才需要考虑同步集合或并发集合。
解决方法 1: 给整个集合上添加一个锁
List<Integer> list