You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot中synchronized锁对象不同引发性能差异的疑问

问题原因解析

核心差异出在锁的并发粒度上,和Spring Boot单例Bean的特性直接相关:

  • 用synchronized(this)时:@Service默认是单例Bean,this指向应用中唯一的MyService实例。这意味着methodA、methodB、methodC三个方法共享同一把锁——不管调用哪个方法,所有线程都得排队争抢这同一个锁,三个方法完全串行执行,并发度被压到最低,必然出现性能变慢。
  • 改用成员对象作为锁时:如果三个方法分别使用不同的成员锁对象(比如methodA锁objA、methodB锁objB、methodC锁objC),那三个方法的锁就互不干扰。线程调用不同方法时不会互相阻塞,并发度恢复正常,性能变慢的现象自然消失。要是三个方法用的是同一个成员锁对象,性能表现应该和synchronized(this)一致,可以检查下代码是否给每个方法分配了独立的锁对象。

补充:如果三个方法用同一个成员锁却仍性能正常,那可以排查下Spring代理的特殊情况(比如CGLIB代理下this指向代理对象,而成员锁是目标对象的属性),但这种情况概率极低,核心还是锁的并发粒度问题。

内容的提问来源于stack exchange,提问作者Somen Biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:47:39