70%的Java程序员不知道为啥 ConcurrentHashMap 读操作不需要加锁?
分类:
编程语言 时间:
2019-08-07 16:15:06
阅读次数:
99
jdk1.8我认为有几个主要的难点: 1. 同步机制 2. 红黑树的操作 3. 数学原理(重要是基于统计值的算法选取和变量设定) 其中这里只分析同步机制中比较重要的部分。 这篇东西和上一篇文章LongAdder的原理关联性比较大,如果懂LongAdder的则忽略。 全文主要从以下几方面来讲: 1. ...
分类:
其他好文 时间:
2019-08-03 21:36:30
阅读次数:
111
写这篇文章是因为jdk1.8 concurrentHashMap计算容量扩容前用到了这个类,所以之后就研究了一下这个类。 本文主要有几点内容: 1. 为什么需要LongAdder这个类 2. LongAdder实现原理解析 为什么需要LongAdder这个类 看这个东西前先看看AtomicLong( ...
分类:
其他好文 时间:
2019-08-03 13:02:54
阅读次数:
87
上一节写了ReentrantLock, 那这一节就正好来写积蓄已久的1.7 concurrentHashMap了。因为1.7里面concurrentHashMap里面的segment是继承自ReentrantLock的。 我认为理解这个类有几个重点: 1. 理解这个类的设计和Hashtable有什么 ...
分类:
其他好文 时间:
2019-08-02 22:41:41
阅读次数:
110
注:hashtable:使用一把锁处理并发问题,当有多个线程访问时,需要多个线程竞争一把锁,导致阻塞。 concurrentHashMap则使用分段,相当于把一个hashmap分成多个,然后每个部分分配一把锁,这样就可以支持多线程访问。 1、HashMap与hashtable继承关系图: 2、has ...
分类:
其他好文 时间:
2019-08-01 14:27:17
阅读次数:
121
其实这一篇是想写jdk1.7和jdk1.8里面的concurrentHashMap的,毕竟是阿汤哥介绍的硬核方法,之前研究了一个多星期,大致的内容和难点都看懂了,但是还是有一些不满足的地方。应该是一种知识点的依赖关系的问题: 1.8里面的concurrentHashMap是依赖于LongAdder的 ...
分类:
编程语言 时间:
2019-07-29 21:43:31
阅读次数:
145
ConcurrentHashMap1.7和1.8对比 数据结构 1.7中采用Segment+HashEntry的方式实现 ConcurrentHashMap初始化时,计算出Segment数组的大小ssize和每个Segment中HashEntry数组的大小cap,并初始化Segment数组的第一个元 ...
分类:
其他好文 时间:
2019-07-20 23:07:08
阅读次数:
116
HashTable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化 初始size为11,扩容:newsize = olesize*2+1 计算index的方法: ...
分类:
其他好文 时间:
2019-07-16 12:47:02
阅读次数:
116
Java基础内容学习总结路线,必须在学习后进行归纳总结,下次复习也有迹可循 多线程 线程 线程池 锁 中间件 jvm JMM GC JIT 集合 HashMap ConcurrentHashMap LinkedHashMap ArrayList LinkedList HashSet LinkedHa ...
分类:
编程语言 时间:
2019-07-07 12:22:28
阅读次数:
107
1.JDK1.7版本的CurrentHashMap的实现原理 在JDK1.7中ConcurrentHashMap采用了数组+Segment+分段锁的方式实现。 1.Segment(分段锁) ConcurrentHashMap中的分段锁称为Segment,它即类似于HashMap的结构,即内部拥有一个 ...
分类:
其他好文 时间:
2019-07-06 19:00:30
阅读次数:
84