
数据结构与算法
文章平均质量分 94
yield-bytes
Java高级后端、大数据开发、Python高级开发、数据分析与挖掘
展开
-
Java并发进阶系列:深度讨论官方关于jdk1.8ConcurrentHashMap的computeIfAbsent源代码修复逻辑
在文章中《深度解析官方关于jdk1.8的resizeStamp的bug处理过程》,我们讨论关于CHM的核心设计——resizeStam需要修复的处理过程,本文再次基于openJDK的bugs讨论组提出的CHM源代码另外一个会造成死循环的bug,默认读者已经掌握CHM的核心源代码实现,否则无法从本文的讨论中获益。文章前部分先把computeIfAbsent的bug成因分析清楚,再来介绍官网ConcurrentHashMap.computeIfAbsent stuck in an endless loop的讨论原创 2025-05-20 17:45:06 · 716 阅读 · 0 评论 -
Java并发进阶系列:jdk1.8 ConcurrentHashMap的TreeBin读写锁竞争机制讨论
本文接前面ConcurrentHashMap文章的内容,继续深入到TreeBin这个特殊节点的读写锁竞争机制。7、TreeBin类设计原理对TreeBin类深入分析,不仅能够理解为何CHM能支持并发读的底层实现,而且也能加深jk1.8的ConcurrentHashMap整体设计原理。本文将非常细腻地解析TreeBin优秀的读写锁控制设计,此部分内容在全网的相关文章很少涉及。7.1 保证加锁对象不改变的设计思想首先看其源码的注释说明:TreeNodes used at the heads of b原创 2025-05-20 17:44:47 · 861 阅读 · 0 评论 -
Java并发进阶系列:深度讨论jdk1.8 ConcurrentHashMap并发环境下transfer方法桶位分配过程
在前面有多篇关于jdk1.8的ConcurrentHashMap研究是基于源代码给出的深度分析,要知道多线程环境下的ConcurrentHashMap内部运行机制是相对复杂的,好在IDEA提供的相关断点和Debug功能确实好用,使得多线程调试起来直观,通过这种方式能加深多线程操作CHM的执行流程。前期准备这部内容请参考文章中的小节部分,本文不再累赘。使用埋点打印法观测此方法相对繁琐,也比较入门,要求使用者对源代码设计足够理解,否则埋点位置不佳影响观察效果1、测试代码package concur.原创 2025-05-20 17:44:14 · 890 阅读 · 0 评论 -
Java并发进阶系列:jdk1.8的HashMap红黑树设计原理及其源代码深入解析(不含balanceDetection方法)
在前面的《jdk1.8的HashMap源码分析》文章已经给出HashMap中数组+链表这一部分的内容,本篇文章将剩余的HashMap里面红黑树及其相关操作源码进行解析,内容较多,因此单独放在一篇文章进行讨论。一、背景知识由于红黑树的插入、删除、扩容等操作相对复杂,因此建议先熟悉基本数据结构,例如二叉树、二叉搜索树及其关于它的查找、插入、删除操作、2-3节点树等。本人假定看此文章的同学已经具备基本的数据结构知识,因此,关于红黑树的背景知识,这里不再累赘。冷知识:红黑树为什么叫红黑?节点为什么被标记为红原创 2025-05-20 17:43:23 · 612 阅读 · 0 评论 -
Java并发进阶系列:深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(下)
文章说明:因为CSM解析内容较多,因此全文分为“深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(上)”和“深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(下)”两篇文章上篇:CSM数据结构设计原理、doGet、doPut核心方法解析下篇:doRemove核心方法解析、总结remove方法:删除操作的设计原理这里先介绍Doug Lea在源代码注释给出算法设计说明:n.helpDelete(b,f)的设计原理在上面的get、put方原创 2025-05-20 11:16:53 · 872 阅读 · 0 评论 -
基于AQS驱动的ReentrantLock公平锁和非公平锁实现原理解析
本文是入门和理解AQS框架的重要文章,尽管AQS还有共享模式以及条件Condition等设计,但重入锁仍然是最适合理解AQS底层数据结构及其算法设计的切入点。单线程使用可重入锁的内部简单工作机制分别在以下两个断点位置进行debug,断点条件i==5,并且在variables窗口watch一个特殊的变量stateimport java.util.concurrent.locks.ReentrantLock;public class ReentrantLockDemo { public sta原创 2025-05-20 11:17:17 · 754 阅读 · 0 评论 -
Java并发进阶系列:深度讨论官方关于jdk1.8ConcurrentHashMap的resizeStamp源代码修复逻辑
前言首先给出以下open JDK版本的序号说明和Oracle JDK序号说明(1)对于JDK8或者Java 8即可指代openjdk-8-jdk或者java-1.8.0-openjdk,也可指代Oracle家的Java SE 8或者JDK 8u211 and later(1)对于JDK16或者Java 16即可指代openjdk的JDK 16.0.2也可指代Oracle家的Java SE 16或者 jdk16.0.1这里为何给出Java 8和Java 16版本说明?因为本文所提的bug在J原创 2025-05-20 11:18:05 · 602 阅读 · 0 评论