两个并发集合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完全不一样,感兴趣的自己看看。

目录
相关文章
|
5月前
|
安全
CopyOnWriteArrayList技术探究
CopyOnWriteArrayList 是java.util.concurrent的并发类,线程安全,遵循写时复制的原则(CopyOnWrite)。通过“写入时复制”(Copy-On-Write, COW)的策略来保证集合的线程安全,适用于读多写少的并发场景。
|
9月前
|
编解码 安全 算法
Java多线程基础-18:线程安全的集合类与ConcurrentHashMap
如果这些单线程中的集合类确实需要在多线程中使用,该怎么办呢?思路有两个: 最直接的方式:使用锁,手动保证。如多个线程修改ArrayList对象,此时就可能有问题,就可以给修改操作进行加锁。但手动加锁的方式并不是很方便,因此标准库还提供了一些线程安全的集合类。
134 4
|
9月前
|
存储 安全 NoSQL
5分钟从0到1探秘CopyOnWriteArrayList(满满干货~)
5分钟从0到1探秘CopyOnWriteArrayList(满满干货~)
|
9月前
|
存储 安全 Java
Java并发基础:CopyOnWriteArrayList全面解析
CopyOnWriteArrayList类的最大优点在于读取时无需加锁,非常适合读多写少的并发场景,由于其写操作通过复制底层数据来实现,从而保证了读取数据的一致性和高效性,此外,它简单易用,是快速实现线程安全列表的不错选择,CopyOnWriteArrayList在读操作占主导的场景下,能够提供出色的性能和稳定性。
168 1
Java并发基础:CopyOnWriteArrayList全面解析
|
9月前
|
存储 安全 算法
java多线程之并发容器集合
java多线程之并发容器集合
|
9月前
|
安全 容器
线程安全的集合类(ConcurrentHashMap面试超高频考点)
线程安全的集合类(ConcurrentHashMap面试超高频考点)
60 0
线程安全的集合类(ConcurrentHashMap面试超高频考点)
|
安全 Java 索引
JUC第十六讲:JUC集合: CopyOnWriteArrayList详解
JUC第十六讲:JUC集合: CopyOnWriteArrayList详解
|
存储 安全 算法
Java并发编程之ConcurrentHashMap源码分析
HashMap多线程put后get为null和多线程put的时候可能导致元素丢失 在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap
261 0
Java并发编程之ConcurrentHashMap源码分析
|
安全 Java
Java并发编程解析,ConcurrentHashMap理解
Java并发编程解析,ConcurrentHashMap理解
139 0
Java并发编程解析,ConcurrentHashMap理解
|
存储 安全 Java
面试突击18:为什么ConcurrentHashMap是线程安全的?
ConcurrentHashMap是HashMap的多线程版本,HashMap在并发操作时会有各种问题,比如死循环问题、数据覆盖等问题。而这些问题,只要使用ConcurrentHashMap就可以完美解决了,那问题来了,ConcurrentHashMap是如何保证线程安全的?它的底层又是如何实现的?接下来我们一起来看。
5070 1
面试突击18:为什么ConcurrentHashMap是线程安全的?