压测卡死CPU正常?Java死锁排查实录,十年老兵避坑指南
Java死锁实战分享:踩过的坑、避坑的招,不玩虚的前阵子重构一个老项目,上线前自测没问题,一到压测直接卡壳。线程池满了,日志不报错,CPU也不高,就是所有请求都超时。查了整整一下午,最后用jstack一看,好家伙,死锁了。这种坑,我干Java这十年,踩过没有十次也有八次。
四百个线程集体挂起:jstack一眼揪出Java级死锁
#头条我来了#大促开场12点08分,售后和取消订单两个接口同时超时,Tomcat 400个线程集体BLOCKED,CPU占用却从25%掉到3%——不是忙死了,是全体罚站。jstack抓下来,底部一行"Found one Java-level deadlock"把元凶直接送到脸上。
StampedLock 实战教程:网关路由、库存扣减、缓存防重
读多写少的场景里,ReentrantReadWriteLock 的读锁还是要走一遍 CAS。StampedLock 的乐观读连锁都不拿,读一个版本号就完事,吞吐能翻几倍。但它是把快刀:不可重入、stamp 要自己管,用错一处就是线上事故。
Java 并发编程:线程池、锁、CAS 与 CompletableFuture
在 Java 后端开发中,并发编程几乎无处不在。用户同时访问系统、多个设备同时上报数据、后台任务批量执行、订单同时创建、消息异步消费……这些场景背后,都离不开 Java 并发编程。例如,一个能源管理平台需要同时处理数千台设备的数据上报。
Go Channel并发死锁:与Java并行对比
Go Channel并发死锁:与Java并行对比很多人把并发和并行混为一谈。并发是任务在时间上重叠的结构,并行是任务在物理上同时执行。Go 用 goroutine 和 channel 把并发做成语言原语,Java 则用线程、锁和 JUC 包。
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
简介ReentrantLock 是 Java 并发包 java.util.concurrent.locks 里的可重入互斥锁。它和 synchronized 一样,都能解决多线程同时修改共享数据带来的线程安全问题。
Java的StampedLock为什么是锁王,这样答就够了
Java的锁从synchronized到ReentrantLock,再到ReentrantReadWriteLock,一路在解决不同层次的并发问题。StampedLock在JDK8加入,在读写锁的基础上引入了乐观读机制,读多写少的场景下性能提升明显。