天天看点

两个并发集合ConcurrentHashMap和CopyOnWriteArrayList知识点汇集

1、ConcurrentHashMap和CopyOnWriteArrayList都是多线程里线程安全的类,是HashMap和ArrayList的多线程替代类。不过也不是绝对的数据一致性,只是弱一致性,比如size()等方法需要扫描全表的操作不保证数据一致。与HashMap不同的是,ConcurrentHashMap并不允许key或者value为null。

2、ConcurrentHashMap在1.7里采用的是分段锁Segment,默认并发度是16,自定义并发度的时候是取值为大于等于自定义值的最小2的幂次方的数字,每一个Segment里存放的都是类似于HashMap的数据结构,相当于多个HashMap的集合,只不过对每个HashMap的写操作有lock。对于并发度的设置不要过小也不要过大,过小的话锁竞争频繁,过大的话CPU cache命中率会下降,从而引起程序性能下降。

3、ConcurrentHashMap在1.8里抛弃了分段锁Segment,采用低层次的原子命令,使用无锁算法(CAS算法)。大体实现代码量很大,跟1.7完全不一样,感兴趣的自己看看。

继续阅读