Java并发容器类运行原理 Map
HashMap 为什么是线程不安全的?
ConcurrentHashMap 在 Java7 和 8 有何不同?
为什么 Map 桶中超过 8 个才转为红黑树?
同样是线程安全,ConcurrentHashMap 和 Hashtable 的区别?
同样是线程安全,ConcurrentHashMap 和
Ssssongsmith 奕飞
这个作者很懒,什么都没留下…
展开
-
33-CopyOnWriteArrayList 有什么特点?
故事要从诞生 CopyOnWriteArrayList 之前说起。其实在 CopyOnWriteArrayList 出现之前,我们已经有了 ArrayList 和 LinkedList 作为 List 的数组和链表的实现,而且也有了线程安全的 Vector 和 Collections.synchronizedList() 可以使用。所以首先就让我们来看下线程安全的 Vector 的 size 和 get 方法的代码:public synchronized int size() { return e原创 2020-12-30 23:51:26 · 204 阅读 · 3 评论 -
32-同样是线程安全,ConcurrentHashMap 和 Hashtable 的区别?
我们都知道 HashMap 不是线程安全的,而 ConcurrentHashMap 和 Hashtable 它们两个确实都是线程安全的,那它们有哪些不同点呢?我们从以下四个角度出发,去分析它们的不同点。出现的版本不同我们先从表面的、显而易见的出现时间来分析。Hashtable 在 JDK1.0 的时候就存在了,并在 JDK1.2 版本中实现了 Map 接口,成为了集合框架的一员。而 ConcurrentHashMap 则是在 JDK1.5 中才出现的,也正是因为它们出现的年代不同,而后出现的往往是对前面原创 2020-12-29 23:46:25 · 318 阅读 · 0 评论 -
31-为什么 Map 桶中超过 8 个才转为红黑树?
JDK 1.8 的 HashMap 和 ConcurrentHashMap 都有这样一个特点:最开始的 Map 是空的,因为里面没有任何元素,往里放元素时会计算 hash 值,计算之后,第 1 个 value 会首先占用一个桶(也称为槽点)位置,后续如果经过计算发现需要落到同一个桶中,那么便会使用链表的形式往后延长,俗称“拉链法”,如图所示:图中,有的桶是空的, 比如第 4 个;有的只有一个元素,比如 1、3、6;有的就是刚才说的拉链法,比如第 2 和第 5 个桶。当链表长度大于或等于阈值(默认为 8原创 2020-12-28 23:02:34 · 178 阅读 · 0 评论 -
30-ConcurrentHashMap 在 Java7 和 8 有何不同?
在 Java 8 中,对于 ConcurrentHashMap 这个常用的工具类进行了很大的升级,对比之前 Java 7 版本在诸多方面都进行了调整和变化。不过,在 Java 7 中的 Segment 的设计思想依然具有参考和学习的价值,所以在很多情况下面试官都会问你:ConcurrentHashMap 在 Java 7 和 Java 8 中的结构分别是什么?它们有什么相同点和不同点?所以本课时就对 ConcurrentHashMap 在这两个版本的特点和性质进行对比和介绍。Java 7 版本的 Conc原创 2020-12-27 21:58:22 · 188 阅读 · 3 评论 -
29-HashMap 为什么是线程不安全的?
HashMap 是我们平时工作和学习中用得非常非常多的一个容器,也是 Map 最主要的实现类之一,但是它自身并不具备线程安全的特点,可以从多种情况中体现出来,下面我们就对此进行具体的分析。源码分析第一步,我们来看一下 HashMap 中 put 方法的源码:public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode())原创 2020-12-26 08:25:51 · 213 阅读 · 3 评论