Java学习总结(1.3.2) 并发容器类

精贴 置顶
2020 0
作者:      发布时间: 2020-04-07 16:15:03

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是分段锁










标签:

每日一句

所谓迷茫,就是才华配不上梦想:大事干不了,小事不肯干;不想做手边的事,只想做天边的事。解除迷茫,就从小事做起,从身边的事情做起,能力不是从做大事得来的,而是从这些“不起眼”的事情中锻炼来的。小事不肯干的你,大事轮不到你,趁你跌倒还能站起来的时候,先学会脚踏实地。

标签云

vue
最近综合
情绪巨婴是什么 12.18
普通蛋糕做法 05.31
玉米烤肠芝士面包做法 05.31
Mysql安装教程 - 绿色版 06.18
我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
Typora开发版⽆法使⽤解决⽅法 05.04
为什么无知者越自信? -- 达克效应 05.10
马斯洛需求层次理论 04.29
随机综合
Java学习总结(1.1.1) Java程序运行原理分析 03.17
Java学习总结(2.2.2) 责任链模式 04.20
iPhone 6与iPhone 6 Plus正式开放预订 09.17
Java学习总结(1.3.1) Lock接口和其实现 04.03
中间件1.1.1-分布式消息中间件设计篇 04.22
android 一个Activity跳转到另一个Activity,并数值传递的方法 04.28
中间件1.2.2-ActiveMQ支持的消息协议讲解 04.23
中间件1.2.4-ActiveMQ持久化原理和事务机制 04.29