线程中的一些简单总结

线程中一些简单总结

简单的总结:

为什么扩容的数量都是2的幂指数呢
这样做可以加快速度,很多节点在扩容前后都是可以保持不变的

ConcurrentHashMap的弱一致性?
在get(key)的时候是在链表进行遍历,有可能返回的是过时的数据。
那怎么保持强一致性呢?
Collections.synchronizedMap()方法。

在多线程的情况下,并且是jdk1.7的场景
应该尽量避免使用ConcurrentHashMap的size,containsValue的方法,很影响性能的。
在jdk的1.8中,这个size是直接算好的,可以直接使用,用的是addCount()方法

ConcurrentHashMap的默认容量是16,加载因子是0.75?
是通过大量的实现得出来的结果。

根据数组元素中,第一个结点数据结构是Node还是TreeNode可以判断该位置下是链表还是红黑树

jdk8下,把ConcurrentHashMap中,Entry换成了Node

ConcurrentHashMap与1.8中HashMap不同点?
它并不是转换成红黑树,而是把这些结点放在TreeBin中,有TreeBin完成对红黑树的包装。
TreeNode在ConcurrentHashMap中扩展自Node类,而并非是HashMap中的扩展自LinkedHashMap.Entry<k,v>类,也就是说TreeNode带有next指针。

在ConcurrentHashMap构造方法中,在new出一个map的实例时,并不会创建其中的数组等等相关的部件,只是进行简单的属性设置而已。
真正的初始化是在put的时候去完成的。

HashTable,使用的synchronized来保证线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

張義帥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值