想象一个场景:活动页上线,两个入口同时在扣同一份库存,各扣 10 万次,运营对账时发现账对不上——凭空少了一截。日志里没有任何报错,把请求单独重放一遍,每一笔又都是对的。这种"单看每一步都对,合在一起就是错"的问题,十有八九出在并发。
volatile、synchronized、AtomicInteger、线程池——这些东西平时都在用,但"各自到底解决什么问题、为什么要配合着用",值得系统梳理一遍。这篇就按这条线走:先看多线程为什么会出事,再按"一个问题一把钥匙"讲每件工具,最后讲线程池怎么配。文中的示例代码都实际跑过(JDK 21),运
