Java学习总结(1.3.2) 并发容器类
JDK源码学习方法更重要
逻辑思维能力是梳理学习方法的基础。养成线性思维:两个或者多个概念,像一条线串起来。
1)演绎推导法
示例:因果推理。因为JAVA中网络编程只提供了BIO和NIO两种方式,所以一切框架中,涉及到网络处理的,都可以用这两个知识点去探究原理。
2)归纳总结法
示例:可能正确的猜想。线上10台服务器,有三台总是每天会自动重启,收集相关信息后,发现是运维在修改监控系统配置的时候,漏掉了提高这三台机器的重启阈值。
3)类比法
集群概念就好像是马在拉车,一匹马拉不动的时候,就使用多匹马去拉分布式的概念,就像是理发的过程中,洗头发和剪头发是不同的人负责的。
HashMap源码解析
JDK1.7存储方法,初始一定长度的数组,每个数组以链表方法存储多个数据。
数组的初始长度 16,根据数据的数量进行扩容。
扩容阈值(两倍扩容)
扩容性能不好,可以初始化避免扩容
JDK1.8:不同地方,链表长度为8之后,转用红黑树
Hashtable
线程安全,但是锁粒度太大,锁住了整个的集合,并发度太低,性能不好。
Hashtable是一个比较重的数据结构,所以你井不能为了追求并发多的Hashtable。
一个Hashtable,也就是一个分段,里面存储的数据会比较多,一个分段锁是一个比较大粒度的锁。
JDK1.8里面,对链表加锁。
链表星一个比较轻的数据结构,每个链表存放的数据很少,一般在锁的粒度比较小并发度就很高。
锁住链表的头部,就是锁住整个链表线程也是安全的。
这样额做法,和DK1.7的分段锁,有什么区别?
JDK1.7每个分段都会有很多的数据,锁的粒度虽然比Hashtable要好,仍然还是粒度很多,并发度是一定的。
JDK1.8中是链表,链表的粒度非常小,并发度相对来说就大很多,而且不固定, table扩容,链表增多,并发度就更高
ConcurrentHashMap
线程安全
JDK1.7是分段锁
每日一句
博客分组
标签云
- 最近综合
- 情绪巨婴是什么 12.18
- 普通蛋糕做法 05.31
- 玉米烤肠芝士面包做法 05.31
- Mysql安装教程 - 绿色版 06.18
- 我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
- Typora开发版⽆法使⽤解决⽅法 05.04
- 为什么无知者越自信? -- 达克效应 05.10
- 马斯洛需求层次理论 04.29
- 随机综合
- 为什么无知者越自信? -- 达克效应 05.10
- 中间件1.2.1-ActiveMQ入门 04.22
- Microsoft Edge和Google Chrome的STATUS_INVALID_IMAGE_HASH 07.06
- Java学习总结(2.2.2) 责任链模式 04.20
- 鸿蒙OS代码正式开源 09.11
- iPhone 6与iPhone 6 Plus正式开放预订 09.17
- android 一个Activity跳转到另一个Activity,并数值传递的方法 04.28
- Spring返回json可以跨域设置 08.21