看源码前我们必须先知道一下ConcurrentHashMap的基本结构。ConcurrentHashMap是采用分段锁来进行并发控制的。 其中有一个内部类为Segment类用来表示锁。而Segment类里又有一个HashEntry<K,V>[]数组,这个数组才是真正用 来存放我们的key-value ...
分类:
其他好文 时间:
2019-06-07 14:22:52
阅读次数:
89
五个线程同时往 HashMap 中 put 数据会发生什么? ConcurrentHashMap 是怎么保证线程安全的? 在分析 HashMap 源码时还遗留这两个问题,这次我们站在 Java 多线程内存模型和 synchronized 的实现原理,这两个角度来彻底分析一下。至于 JDK 1.8 的 ...
分类:
编程语言 时间:
2019-06-07 10:42:43
阅读次数:
124
HashMap只是相对线程安全,如果出现数据竞争就抛出fail fast;HashTable则将每个操作都上锁,如果有耗时的操作,那么后续的操作均会被阻塞,大大降低程序的吞吐率。而ConcurrentHashMap正是为了解决这样一个问题而出现的。 ConcurrentHashMap和HashMap ...
分类:
编程语言 时间:
2019-06-02 16:29:13
阅读次数:
160
为什么Hashtable ConcurrentHashmap不支持key或者value为null ...
分类:
其他好文 时间:
2019-05-26 23:42:10
阅读次数:
604
ConcurrentHashMap 源码详细分析(JDK1.8) 1. 概述 《HashMap 源码详细分析(JDK1.8)》: Java7 整个 ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承 ReentrantLock 来进行加锁,所以每次需要加锁的操 ...
分类:
其他好文 时间:
2019-05-25 09:33:48
阅读次数:
86
分类 本地缓存(HashMap/ConcurrentHashMap、Ehcache、Guava Cache等), 缓存服务(Redis/Tair/Memcache等)。 使用场景 什么情况适合用缓存?考虑以下两种场景: 1、短时间内相同数据重复查询多次且数据更新不频繁,这个时候可以选择先从缓存查询, ...
分类:
其他好文 时间:
2019-05-19 23:14:04
阅读次数:
163
[TOC] 6 ConcurrentHashMap jdk1.7 + hash算法的介绍 + 构造方法做了什么 + get方法做了什么 + put方法做了什么 + 动态扩容逻辑 6.1 预备知识 6.2 jdk1.7原理和实现 ConcurrentHashMap是由Segment数组结构和HashE ...
分类:
其他好文 时间:
2019-05-18 00:26:30
阅读次数:
115
阅读前提:本文分析的是源码,所以至少读者要熟悉它们的接口使用,同时,对于并发,读者至少要知道 CAS、ReentrantLock、UNSAFE 操作这几个基本的知识,文中不会对这些知识进行介绍。Java8 用到了红黑树,不过本文不会进行展开,感兴趣的读者请自行查找相关资料。 Java7 HashMa ...
分类:
编程语言 时间:
2019-05-16 17:42:18
阅读次数:
148
一、简介前面的一篇文章我们介绍了ConcurrentHashMap1.7版本版本的源码介绍,我们知道1.7版本的ConcurrentHashMap采用的是分段锁的思想,提高了锁的数量,提高了并发的特性,但是也有其局限性,例如就是并发的数量也就是锁的数量是不可改变的等;我们今天要介绍的1.8版本的ConcurrentHashMap其实也是采用了多锁的思想,不过在1.8中没有了segments这些东西
分类:
其他好文 时间:
2019-05-16 16:24:58
阅读次数:
127
1、 HashMap 加入了红黑树 2、ConcurrentHashMap 使用了CAS无锁机制 3、 永久区没有了,成了元空间(MetaSpace)。相对于方法区,直接使用的物理内存!相应的PremGenSiz 、 MaxPremGenSize 参数失效了 取而代之的是:MetaSpaceSize ...
分类:
编程语言 时间:
2019-05-13 01:15:51
阅读次数:
127