00:00 / 06:04
连播
清屏
智能
倍速
点赞88
Java的7把锁 别再一股脑上锁了,选对锁,QPS翻三倍 2026年,Java生态已经全面拥抱Loom虚拟线程,ZGC停顿时间压到1ms以内,可我发现,很多程序员的代码里,还是一把synchronized走天下。 不是synchronized不好,是你还没搞清楚:今天的Java,已经给你准备了7把性能各异的锁。用错了,系统该卡还是卡。 第一把:synchronized——最稳的老黄牛 优势是什么都不用想,JVM帮你兜底。虚拟线程下它做了偏向锁优化,但高竞争时,它依然会触发“锁膨胀”,从偏向到轻量再到重量级,最后被迫进行操作系统级别的线程阻塞。如果你的业务单机QPS已经超过5000,还大面积用synchronized,上下文切换能把CPU吃掉15%。 第二把:ReentrantLock——可中断、可超时的精确控场王 相比synchronized,它最大的进步是不撞南墙能回头。你可以尝试加锁,超时放弃,不会死死卡住请求。2026年的项目里,凡是涉及外部接口调用的临界区,ReentrantLock已经是标配——防止一个慢接口把整个线程池拖垮。缺点是手动解锁,忘了就是生产事故。 第三把:ReentrantReadWriteLock——读多写少的封神器 它的特色是一个资源可以同时被N个线程读,但只要有一个写,读写互相阻塞。最适合缓存场景:99%的请求在读配置,1%的定时任务刷新配置。用了它,缓存QPS能从2000直接拉到20000。致命缺点:写锁饥饿。大量读一直进来,写锁可能永远抢不到。 第四把:StampedLock——乐观读,让锁几乎消失 这是2026年很多高性能中间件的底层选择。它提供“乐观读”模式:先假装没锁去读数据,读完后检查在此期间有没有发生过写操作。如果没有,这把锁等于没上。如果有,再升级成悲观读锁。对纯读场景,锁开销趋于零。不推荐在虚拟线程里嵌套使用,容易引发CPU空转。 第五把:Semaphore——限流神器,并不保护数据 前面四把锁保护的是“共享数据的正确性”,Semaphore保护的是“系统的呼吸节奏”。它控制同时访问某个资源的线程数。比如限定一个数据库连接池最多20个线程操作,多余的排队。用它来隔离不同业务——核心交易通道10个许可,报表导出2个许可,互不影响。 第六把:CountDownLatch——协调,不是锁 严格来说它不是互斥锁,而是倒计时门闩。主线程等5个子线
00:00 / 04:38
连播
清屏
智能
倍速
点赞87
00:00 / 00:16
连播
清屏
智能
倍速
点赞10
00:00 / 12:49
连播
清屏
智能
倍速
点赞2401
00:00 / 00:33
连播
清屏
智能
倍速
点赞3