Java 并发容器

2021-04-01  本文已影响0人  向梦而来

什么是并发容器的实现?

何为同步容器?可以简单地理解为通过 synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。

并发容器,使用了与同步容器完全不同的加锁策略来提供更高的并发性和伸缩性。

SynchronizedMap 和 ConcurrentHashMap 有什么区别?

关于 ConcurrentHashMap 的源码解析,推荐胖友看看如下两篇文章:

🦅 Java 中 ConcurrentHashMap 的并发度是什么?

在 JDK8 前,ConcurrentHashMap 把实际 map 划分成若干部分来实现它的可扩展性和线程安全。这种划分是使用并发度获得的,它是 ConcurrentHashMap 类构造函数的一个可选参数,默认值为 16 ,这样在多线程情况下就能避免争用。

在 JDK8 后,它摒弃了 Segment(锁段)的概念,而是启用了一种全新的方式实现,利用 CAS 算法。同时加入了更多的辅助变量来提高并发度,具体内容还是查看源码吧。

🦅 ConcurrentHashMap 为何读不用加锁?

在 JDK7 以及以前

在 JDK8 开始

CopyOnWriteArrayList 可以用于什么应用场景?

CopyOnWriteArrayList(免锁容器)的好处之一是当多个迭代器同时遍历和修改这个列表时,不会抛出ConcurrentModificationException 异常。在 CopyOnWriteArrayList 中,写入将导致创建整个底层数组的副本,而源数组将保留在原地,使得复制的数组在被修改时,读取操作可以安全地执行。

CopyOnWriteArrayList 透露的思想:

CopyOnWriteArrayList 适用于读操作远远多于写操作的场景。例如,缓存。

关于 CopyOnWriteArrayList 的源码,可以看看 《CopyOnWriteArrayList 实现原理及源码分析》 文章。

上一篇 下一篇

猜你喜欢

热点阅读