- 博客(27)
- 收藏
- 关注
原创 「JUC」高并发容器:ConcurrentHashMap 源码解析(JDK7 vs JDK8) 与 阻塞队列
本文讲解了 Java 并发集合核心实现,重点分析 ConcurrentHashMap 和 BlockingQueue。JDK8 通过“空桶 CAS、冲突加锁”提升并发性能,并用 volatile 实现无锁读取;多线程协同扩容(ForwardingNode)和 LongAdder 式分散计数优化写入吞吐量。LinkedBlockingQueue 的两把锁设计实现生产者与消费者并行执行,实际开发中需限制线程池队列容量以防 OOM。
2026-03-06 18:30:20
937
原创 「JUC」并发协作工具箱:读写锁、信号量与循环屏障实战
本文介绍Java并发包JUC核心工具,先分析死锁等活跃性问题及排查、预防方法。对比ReentrantLock相对synchronized的优势,讲解ReentrantReadWriteLock读写分离、AQS位运算与锁降级,介绍StampedLock乐观读。同时阐述Semaphore限流原理,以及CountDownLatch、CyclicBarrier线程协同机制,结合实战场景,助力高并发代码开发。
2026-03-06 18:25:13
495
原创 「JUC」JUC 的心脏:AQS 抽象队列同步器与 ReentrantLock 源码深度解析
本文系统梳理 JUC 核心并发框架,从 ForkJoin 工作窃取机制切入,解析双端队列如何降低竞争并提升多核利用率;随后深入 AQS 的 state 与 CLH 双向队列设计,拆解自定义锁实现原理;结合源码推演 ReentrantLock 的公平/非公平策略、重入与可中断机制;最后剖析 Condition 双队列模型与 await/signal 流转逻辑。全面揭示 Java 并发底层调度思想与高性能设计本质。
2026-03-04 07:00:00
1020
原创 「JUC」并发编程核心:Java 线程池架构、原理与生产级配置
本文从手写简易线程池入手,拆解“生产者-消费者”模型与阻塞队列实现,讲清线程复用与拒绝策略的设计思想。随后深入解析 ThreadPoolExecutor 的核心架构,包括 ctl 位运算状态机、任务提交流程与七大构造参数,并指出 Executors 的生产陷阱。结合真实高并发场景,探讨线程池动态调优、线程饥饿与物理隔离方案,延伸至定时任务与 Tomcat 魔改线程池策略,全面构建并发资源统筹与性能权衡的实战思维。
2026-03-03 20:53:31
560
原创 「JUC」线程隔离与不可变性:ThreadLocal 源码剖析与 Final 关键字
本文围绕并发编程中的“以设计消灭并发”思想,系统解析 final 不可变语义与 ThreadLocal 线程隔离机制。深入剖析 final 的内存屏障与可见性保障原理,讲解 ThreadLocalMap 的结构演进、弱引用设计与内存泄漏根因,并结合线程池场景分析 InheritableThreadLocal 失效问题。强调通过不可变与隔离思想避免共享可变状态,构建高性能、低风险的并发架构。
2026-03-02 08:00:00
920
原创 「JUC」无锁编程奥义:CAS 原理、Atomic 原子类与 LongAdder 优化
本文围绕高并发场景下的无锁编程展开,从 CPU 原语级别的 CAS 机制讲起,解析其乐观锁思想、自旋特性与 ABA 问题,并介绍通过 AtomicStampedReference 解决版本一致性隐患。随后梳理 JUC 原子类体系,重点剖析 AtomicInteger 的 CAS + volatile 实现原理。针对高竞争瓶颈,深入拆解 LongAdder 的分段 CAS 思想、Base + Cell 架构与扩容机制,并结合缓存行伪共享与 @Contended 优化说明其性能优势。全文强调在强一致与高吞吐之间
2026-03-01 20:23:58
873
原创 「JUC」深入理解 JMM:Volatile 进阶实战与 Synchronized 极限微操
摘要:本文深入探讨Java并发编程的两大高阶盲区。首先解析synchronized偏向锁的JVM优化机制——当频繁撤销偏向锁时,JVM会触发批量重偏向(阈值20次)和批量撤销(阈值40次)来提升性能。其次剖析volatile在工业级设计模式中的应用,重点讲解两阶段终止模式如何结合volatile可见性和线程中断机制实现线程优雅停止。文章揭示了JVM在并发场景下的智能优化策略,以及如何利用底层特性编写高性能并发代码,为开发者构建大厂级技术护城河提供实践指导。
2026-02-28 17:58:18
621
原创 「JUC」线程安全与管程机制:Synchronized 原理与等待唤醒机制
本文从高并发业务场景切入,深度剖析 Java 线程安全的底层防线。首先扫盲临界区与竞态条件,破解“线程八锁”迷局;随后直击 JVM 腹地,硬核拆解 Monitor 管程模型及 Synchronized 锁升级全过程。在此基础上,对比 Wait/Notify 虚假唤醒陷阱与底层 LockSupport 发牌机制,并手敲工业级生产者-消费者队列,打通线程协作。最后,奉上 Linux 线上死锁排查的 jstack 实战指南。全文拒绝空谈,紧扣一线大厂面试与核心业务防坑,助你彻底筑牢并发护城河。
2026-02-28 12:48:16
968
原创 「JUC」Java并发基石:进程、线程与生命周期详解
本文作为 JUC 并发编程的开篇基石,直接从操作系统内核视角揭秘 Java 线程的“生老病死”。文章首先剖析进程与线程的隔离机制,揭示 Java 线程 1:1 映射内核线程的代价与上下文切换痛点;其次,拆解 sleep、yield、join 等协作 API 的核心差异,并基于“两阶段终止模式”深度讲解如何利用 interrupt 信号优雅地中断线程;最后,全景推演 Java 特有的六大线程状态流转,结合 jstack 给出排查线上死锁、CPU 飙升等故障的实战指南,为后续攻克并发锁与线程池夯实底层内功。
2026-02-27 20:39:32
888
1
原创 「JVM」 并发编程基石:Java 内存模型(JMM)与 Synchronized 锁升级原理
本文深入剖析了Java内存模型(JMM)如何解决多线程并发中的原子性、可见性和有序性问题。首先澄清了JMM与JVM内存结构的区别,接着通过实际案例揭示多线程下i++操作的非原子性、变量修改的不可见性以及指令重排导致的异常行为。文章详细分析了volatile关键字的作用,包括确保变量修改的可见性和禁止指令重排,并通过双检锁单例模式展示了其实际应用。最后指出,volatile虽能解决可见性和有序性问题,但无法保证原子性操作,在业务场景中需结合锁机制或原子类来确保线程安全。
2026-02-23 16:42:12
944
原创 「JVM」 Java 类加载机制与双亲委派模型深度解析
摘要:本文以上帝视角详细剖析了Java类从字节码到内存加载的完整生命周期,包括加载、链接、初始化三个阶段。深入解析了JVM类加载机制中的双亲委派模型及其打破场景,探讨了自定义类加载器的应用场景与实现原理。最后阐述了JIT编译器的分层优化策略,包括逃逸分析、方法内联等关键技术。通过外卖系统等真实案例,揭示了类加载机制对系统性能的深远影响,为开发高性能Java应用提供了底层原理支持。全文以生动类比结合技术深度,系统性地呈现了Java类加载与执行的完整技术栈。
2026-02-22 21:01:50
1293
原创 「JVM」 从字节码看多态原理与语法糖本质
本文深入剖析Java字节码底层机制,揭示语法背后的运行原理。首先解析基于栈的指令集执行模型,重点探讨多态的实现机制,包括invokevirtual指令与vtable虚方法表的动态绑定原理,以及JIT优化技术。详细分析异常处理的底层实现,包括异常表监控机制和finally代码块的暴力复制原理,并警示finally吞异常的风险。最后解密语法糖的真相,通过字节码视角,帮助开发者建立底层思维,提升代码优化和问题排查能力。
2026-02-20 20:53:26
825
1
原创 「JVM」Java 垃圾回收机制全解析:回收算法、分代流转与 G1 收集器底层拆解
本文系统梳理了JVM垃圾回收机制,涵盖对象回收判定(可达性分析、引用类型)、三大回收算法(标记-清除/整理/复制)、堆内存分代模型(新生代/老年代)及主流回收器(Serial/Parallel/CMS/G1)。重点解析了CMS并发标记和G1分区的创新设计,揭示了卡表机制解决跨代引用的精妙思路。最后强调调优核心在于减少GC发生,需结合业务场景选择吞吐量优先或低延迟策略,并通过合理参数设置避免内存碎片和并发失败问题。全文贯穿“最快GC是不发生GC”的优化理念,为Java性能调优提供理论基础。
2026-02-19 23:46:29
1409
原创 「JVM」 深入理解 StringTable:从底层编译优化到 intern 核心解密
本文深入分析了Java中String类的底层机制,重点探讨了字符串常量池和intern()方法在不同JDK版本中的差异。通过经典代码示例,揭示了编译期优化与运行期拼接的区别:常量拼接会被优化到字符串池,而变量拼接会在堆中创建新对象。特别指出JDK1.6和1.8中intern()方法的实现差异:1.6会深度拷贝到方法区,1.8则直接引用堆对象地址。文章还提供了性能调优建议,包括合理使用intern()和调整StringTable大小。这些底层知识对优化内存使用和解决面试问题都具有重要价值。
2026-02-17 18:52:17
877
原创 「JVM」 深入剖析 JVM 内存结构:从底层原理到线上排查
本文深入剖析了JVM内存结构及其在Java开发中的关键作用。文章首先将JVM内存划分为线程私有(程序计数器、虚拟机栈、本地方法栈)和线程共享(堆、方法区)区域,详细解析了各区域的功能特性及常见问题。重点探讨了堆内存泄漏排查方法、方法区演进历程、字符串常量池优化等核心知识点,并揭示了NIO直接内存的底层机制。通过实际案例展示了CPU飙升、内存溢出等线上问题的诊断方法,强调掌握JVM内存原理对构建高并发系统的重要性。文章为Java开发者提供了系统性的JVM内存知识框架和实用排查技巧。
2026-02-16 19:48:45
1083
原创 【黑马点评】Redis 高级数据结构在社交与统计场景的降维打击
摘要:本文复盘《黑马点评》项目中Redis在社交网络和大数据统计场景的应用实践。通过Set实现好友关注和共同关注查询,利用ZSet实现Feed流推送,使用GEO处理附近商户搜索,并采用BitMap和HyperLogLog分别解决海量用户签到和UV统计问题。这些方案展示了Redis丰富数据结构如何优雅解决传统数据库难以处理的高并发场景,从社交关系到空间搜索再到大数据统计,体现了选择合适数据结构对系统性能的关键影响,为开发者提供了从CRUD到架构思维的提升路径。
2026-02-09 18:50:44
695
原创 【黑马点评】秒杀业务技术迭代总结:从单体到高并发的进化
本文围绕秒杀系统在“快”和“对”之间的优化演进:首先通过数据库乐观锁避免超卖;再用 Redis 分布式锁与 Redisson 解决一人一单及集群并发一致性;随后将下单流程拆分为 Redis 预校验 + 异步落库,提升性能并减轻数据库压力;最后引入 Redis Stream 作为持久化消息队列,利用消费者组、ACK 与 Pending List 实现可靠消费与宕机恢复。整体架构由同步到异步、由本地到分布式,使系统同时具备高并发处理能力与数据一致性与稳定性。
2026-02-06 04:15:00
1390
原创 【黑马点评】Redis Stream 消息队列:异步秒杀的终极优化
本文讲述秒杀系统从同步到可靠异步的优化过程:最初所有校验与落库在主线程完成,数据库成为瓶颈;随后改为 JVM 阻塞队列异步写库,性能提升但存在内存溢出和宕机丢单问题。最终采用 Redis Stream 作为消息队列,在 Lua 中同时完成扣库存与写入队列,保证原子性;消费者读取后落库并 ACK,Pending List 可在异常后恢复处理。相比 List 和 Pub/Sub,Stream 提供持久化、消费确认和多消费者协作,结合数据库幂等实现“至少一次+不重复”的可靠下单,使服务无状态化并支持高并发与扩容。
2026-02-05 22:49:41
728
原创 【黑马点评】异步秒杀优化:从 Redisson 到 Lua + 阻塞队列
本文介绍了一种基于Redis和异步处理的秒杀系统优化方案。针对传统同步模式下数据库性能瓶颈问题,采用"Redis+Lua脚本+阻塞队列+独立线程池"的三层架构:1)利用Redis原子性Lua脚本快速完成库存校验;2)通过JVM内存队列实现流量削峰;3)使用独立线程异步处理数据库写入。该方案通过解耦业务校验与数据落库,将QPS提升一个数量级,同时解决了跨线程事务失效等关键技术问题。虽然优化效果显著,但仍存在内存队列数据丢失风险,后续可引入Redis Stream实现消息持久化。
2026-02-05 13:34:43
709
原创 【黑马点评】Redisson 分布式锁核心原理剖析
本文探讨了高并发秒杀场景下分布式锁的优化方案。针对JVM本地锁和简易Redis锁的缺陷,项目引入Redisson框架实现分布式锁,解决了可重入性、自动续期和阻塞机制等核心问题。通过Hash结构存储锁状态、看门狗机制实现自动续期,以及Pub/Sub机制优化等待逻辑,Redisson提供了高性能的分布式锁方案。文章还分析了Lua脚本的原子性、公平锁实现及集群部署限制等关键技术点,并指出锁范围必须包裹事务的反模式。最终展望了异步削峰的优化方向,为高并发系统设计提供了实践参考。
2026-02-03 19:38:45
1069
原创 【黑马点评】- Redis 分布式锁进化史:从 SETNX 到 Lua 脚本
本文探讨了分布式锁的演进过程,从单体应用转向分布式系统时面临的核心挑战。首先分析了分布式锁的基本原理和要素(可见性、互斥性、高可用等),对比了MySQL、Redis和Zookeeper三种实现方案。重点展示了基于Redis的实现过程:1)基础SETNX方案;2)通过UUID+线程ID解决误删问题;3)使用Lua脚本确保原子操作。最后指出当前方案的不足(锁超时问题)和后续优化方向(Redisson的看门狗续期机制)。文章完整呈现了一个生产级分布式锁的迭代路径。
2026-02-02 14:18:53
683
原创 【黑马点评】高并发秒杀实战:从超卖问题到分布式锁的深度架构演进
摘要:本文针对高并发秒杀场景下的核心挑战,提出系统性解决方案。首先设计Redis全局唯一ID生成器,通过时间戳+序列号的位运算组合,解决自增ID泄露商业敏感信息的问题。其次针对超卖问题,对比悲观锁与乐观锁性能差异,最终采用改良版CAS方案(库存>0条件),在保证数据安全的同时实现高性能。最后深入分析"一人一单"场景下Spring事务与锁的复杂交互问题。整套方案通过Redis原子操作、数据库乐观锁等技术组合,有效解决了高并发读写、超卖、刷单等核心痛点。
2026-01-31 23:40:23
1118
原创 深入剖析 Redis 缓存三大杀手:穿透、击穿与雪崩
摘要:本文从架构视角剖析Redis在高并发系统中的三大经典问题。缓存穿透指查询不存在数据导致请求穿透到数据库,可通过空对象缓存或布隆过滤器解决;缓存击穿是热点key失效瞬间引发流量冲击,需在强一致(互斥锁)与高可用(逻辑过期)间权衡;缓存雪崩因大量key同时失效或服务宕机,需采用TTL随机化、多级缓存等高可用架构。文章强调缓存设计本质是权衡艺术,需根据业务场景在数据一致性和系统可用性间做出选择。
2026-01-16 15:35:35
1153
原创 【黑马点评】解决缓存击穿:互斥锁 vs 逻辑过期
本文探讨高并发系统中的缓存击穿问题及其解决方案。针对热点Key突然过期导致数据库压力骤增的问题,提出互斥锁和逻辑过期两种方案:互斥锁通过"一人重建,他人等待"机制保证强一致性但牺牲性能;逻辑过期采用"永不过期+异步更新"策略实现高可用但可能短暂不一致。文章从一致性、可用性等维度对比两种方案,指出应根据业务场景(如金融数据需强一致,浏览数据可最终一致)进行技术选型,并强调架构设计需要在性能与可靠性之间权衡取舍。
2026-01-15 14:54:30
1323
原创 【黑马点评】Redis 缓存穿透深度解析:从布隆过滤器到缓存空对象
缓存穿透 (Cache Penetration)是指客户端请求的数据在缓存中不存在,同时在数据库中也不存在。由于数据库中没有数据,所以我们无法将数据写入缓存。这就导致了每次针对该 Key 的请求,都会绕过 Redis,直接打到数据库。击穿:Key 对应的数据存在,只是突然过期了(点)。雪崩:大量的 Key 同时过期(面)。穿透:数据根本就不存在(空)。通过“缓存空对象”配合“TTL 过期策略”,我们以极低的开发成本,有效解决了缓存穿透问题。
2026-01-14 15:30:00
693
原创 【黑马点评】Redis 缓存一致性实战:基于 Cache Aside Pattern 的深度复盘
摘要:本文基于黑马点评项目,探讨商铺数据更新时Redis缓存与数据库的一致性问题。采用CacheAsidePattern模式,通过删除而非更新缓存来优化性能,并选择先改数据库再删缓存的顺序降低数据不一致风险。同时利用Spring事务机制确保操作原子性,在数据库更新失败时自动中断后续操作,保证最终一致性。该方案在读写性能与数据可靠性间取得了平衡,为高并发场景下的缓存处理提供了实践参考。
2026-01-14 10:26:21
1254
原创 【黑马点评】基于 Redis 实现分布式 Session 登录:从原理到实战的深度复盘
在存储用户信息时,我们选择了 Redis 的Hash结构(类似于 Java 的理由如下:结构直观:Hash 天生适合存储对象。Key 是 token,Field 是属性名(如 nickName),Value 是属性值。支持细粒度修改:相比于 String(存储 JSON 字符串),Hash 可以单独修改某个字段(比如只修改昵称),而不需要把整个对象取出来反序列化再存回去,原子性更高。内存占用少:Hash 结构不需要存储 JSON 格式中的大量大括号{}、冒号和引号"",在大数据量下能显著节省内存。
2026-01-09 22:29:53
841
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅