📚

334

一杯咖啡的时间,聊聊技术与成长

连载中 13/21

ThreadLocal:每个线程的抽屉,与那桩著名的内存泄漏

SimpleDateFormat 并发错乱引出线程私有数据:数据存在 Thread 身上的 map,ThreadLocal 只是钥匙。弱引用 key 与强引用 value 的组合拳,以及线程池下的串台事故。

#Java#ThreadLocal#内存泄漏#JUC#并发编程
2026-10-29 · 37 阅读 · 0 评论 · 0 赞
连载中 12/21

读写锁:读多写少的专属答案,与 StampedLock 乐观读

写写互斥、读写互斥、读读共享;锁降级为什么允许、读升级写为什么被禁止。读多写极少场景的终极方案 StampedLock:乐观读先读后校验,近乎无锁。

#Java#读写锁#StampedLock#AQS#JUC
2026-10-28 · 38 阅读 · 0 评论 · 0 赞
连载中 11/21

ReentrantLock:比 synchronized 多出来的四样东西

可中断、可超时、可公平、多条件队列——四个能力一次讲透,用 Condition 改造生产者消费者告别 notify 误伤。选型观:默认 synchronized,四样都不缺才换锁。

#Java#ReentrantLock#Condition#JUC#并发编程
2026-10-28 · 32 阅读 · 0 评论 · 0 赞
连载中 10/21

AQS(下):共享模式与一次完整源码走读

tryAcquireShared 负数排队、非负通行的传播唤醒;以 ReentrantLock 非公平锁的 lock() 为例完整走读——公平与非公平的全部差异,就是要不要先看队列。

#Java#AQS#ReentrantLock#源码#JUC
2026-10-27 · 38 阅读 · 0 评论 · 0 赞
连载中 9/21

AQS(上):一个双向队列,管住天下所有的锁

ReentrantLock、Semaphore、CountDownLatch 源码里全是同一个内核。AQS 三件套:volatile state、双向等待队列、独占与共享——排队调度是天下的公理,判定规则是各家的私法。

#Java#AQS#JUC#并发编程#ReentrantLock
2026-10-27 · 39 阅读 · 0 评论 · 0 赞
连载中 8/21

原子类全家桶:从 AtomicInteger 到 LongAdder 的分摊艺术

atomic 包五大家族一次认全;AtomicLong 高并发下被 CAS 失败重试拖垮的真相,以及 LongAdder 用 base 加 Cell 数组分摊热点的绝地翻盘——代价是弱一致。

#Java#原子类#LongAdder#LongAccumulator#JUC
2026-10-26 · 45 阅读 · 0 评论 · 0 赞
连载中 7/21

CAS:不加锁也能线程安全,前提是懂它的三个软肋

乐观并发的核心:先改,提交时对暗号。一条 cmpxchg 指令的硬件级原子,AtomicInteger 的 do-while 自旋内核,以及 ABA、自旋空耗、单变量天花板三大软肋。

#Java#CAS#AtomicInteger#ABA#JUC
2026-10-26 · 56 阅读 · 0 评论 · 0 赞
连载中 6/21

volatile(下):指令重排与 happens-before 秩序公约

new 一个对象可被重排成三步中的两步,DCL 单例的半成品对象就是这么来的。happens-before 五规则一次讲清,volatile 的完整语义收官。

#Java#volatile#指令重排#happens-before#DCL#JUC
2026-10-25 · 68 阅读 · 0 评论 · 0 赞
连载中 5/21

volatile(上):线程 A 改了变量,线程 B 为什么看不见

一个 while 死循环牵出并发第二宗罪:L1/L2 各核心私有缓存造成的数据割裂,JMM 的主内存/工作内存抽象,以及 volatile 那两条硬性规则——和它治不了的原子性。

#Java#volatile#可见性#JMM#JUC
2026-10-25 · 68 阅读 · 0 评论 · 0 赞