源码 十二月 15, 2019

源码系列-ConcurrentHashMap源码

文章字数 17k 阅读约需 15 mins.

JDK1.8 的实现摒弃了Segment的概念,直接用Node数组 + 链表 + 红黑树的数据结构来实现,并发控制使用SynchronizedCAS来操作,

用来控制table的初始化和扩容的操作,不同的值有不同的含义。

  • table未初始化时:sizeCtl = 0或者 sizeCtl= capacity;
  • table正在初始化:sizeCtl = -1;
  • table初始化完成:sizeCtl = thresold;
  • 当sizeCtl = − (1 + N),表明正在有N条线程正在进行resize操作;
public V put(K key, V value) {
    return...
查看全文

JAVA基础 七月 05, 2019

java基础之HashMap与ConcurrentHashMap重点解读

文章字数 3.4k 阅读约需 3 mins.

HashMap 说明
底层结构 1. JDK1.8之前:数组+链表
2. JDK1.8:数组+链表/红黑树
链表与红黑树之间的转换:
链表->红黑树:链表长度大于等于8且数组长度(hash桶)大于等于64的时候
红黑树->链表:红黑树的节点数量小于等于6的时候退化为链表
元素特性 key、value可以为null,只能有一个key为null的键值对,允许有多个value为null的键值对
hash桶的数量 默认16,加载因子默认0.75(HashMap也许是按照lazy-...
查看全文
0%