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

简介: 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完全不一样,感兴趣的自己看看。

目录
相关文章
|
7月前
|
安全 算法 Java
剑指JUC原理-19.线程安全集合(上)
剑指JUC原理-19.线程安全集合
56 0
|
3月前
|
安全
CopyOnWriteArrayList技术探究
CopyOnWriteArrayList 是java.util.concurrent的并发类,线程安全,遵循写时复制的原则(CopyOnWrite)。通过“写入时复制”(Copy-On-Write, COW)的策略来保证集合的线程安全,适用于读多写少的并发场景。
|
7月前
|
编解码 安全 算法
Java多线程基础-18:线程安全的集合类与ConcurrentHashMap
如果这些单线程中的集合类确实需要在多线程中使用,该怎么办呢?思路有两个: 最直接的方式:使用锁,手动保证。如多个线程修改ArrayList对象,此时就可能有问题,就可以给修改操作进行加锁。但手动加锁的方式并不是很方便,因此标准库还提供了一些线程安全的集合类。
109 4
|
7月前
|
存储 安全 NoSQL
5分钟从0到1探秘CopyOnWriteArrayList(满满干货~)
5分钟从0到1探秘CopyOnWriteArrayList(满满干货~)
|
7月前
|
存储 安全 算法
java多线程之并发容器集合
java多线程之并发容器集合
|
7月前
|
安全 容器
线程安全的集合类(ConcurrentHashMap面试超高频考点)
线程安全的集合类(ConcurrentHashMap面试超高频考点)
53 0
线程安全的集合类(ConcurrentHashMap面试超高频考点)
|
7月前
|
安全 Java 数据库
剑指JUC原理-19.线程安全集合(下)
剑指JUC原理-19.线程安全集合
55 0
|
安全 Java 索引
JUC第十六讲:JUC集合: CopyOnWriteArrayList详解
JUC第十六讲:JUC集合: CopyOnWriteArrayList详解
|
安全 Java
Java并发编程解析,ConcurrentHashMap理解
Java并发编程解析,ConcurrentHashMap理解
128 0
Java并发编程解析,ConcurrentHashMap理解
|
安全 容器
面试阿里被P8质问:ConcurrentHashMap真的线程安全吗?(上)
面试阿里被P8质问:ConcurrentHashMap真的线程安全吗?
205 1
面试阿里被P8质问:ConcurrentHashMap真的线程安全吗?(上)