ConcurrentLinkedQueue和ConcurrentHashMap简单介绍

ConcurrentLinkedQueue是一个单向的链表

 

入队列

 

 

 

 

 每次在队尾追加两个节点,才移动一次tail节点

添加节点1和节点2

 

 在添加一个节点3

 

 step4中q为NULL,添加一个节点,即添加两个节点移动一次

出队列

 

 

 

 出队列是不观察tail指针位置,依赖于head指针后续的节点是否为NULL这一条件,即置NULL成功,出队列成功

 

ConcurrentHashMap的作用是降低Hash冲突,提升并发度
该map集合的结构是在链表和红黑树两种结构之间相互转换的,刚开始是链表的结构,当链表中的元素超过某个值,自动转化为红黑树,当红黑树中元素个数小于某个值,结构又转化为链表
使用红黑树的结构时,查询速度和更新速度比链表快
加锁的方案是对每个节点分别加锁

 

 

 

 

 

初始化

 

 

 

 

 

 

 

 

 

扩容

 

 只有当数组长度大于或者等于64,才会考虑转化为红黑树

 

 

 

 在扩容未完成之前,对应的数据是已经前移到了新的HashMap中,但是获取元素可能还是访问旧的HashMap

 

 

 

 

 

 

 

 在扩容还没有结束之前,想要访问旧的元素,对应的位置放置引用

 



posted @ 2022-12-15 23:38  不忘初心2021  阅读(140)  评论(0编辑  收藏  举报