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

静态特性如何影响synchronized方法?两线程能否同时执行指定同步方法?

嘿,这个问题问到点子上了,刚好是Java并发编程里容易踩坑的知识点,我给你拆解清楚~

静态特性对synchronized方法的核心影响

首先得明确两个锁的本质区别:

  • 普通的synchronized实例方法,锁的是当前调用该方法的对象实例——说白了,每个对象自己一把锁,互不干扰。
  • 而被static synchronized修饰的方法,锁的是当前类的Class对象(JVM里每个类只会生成一个Class实例)。这意味着,静态同步方法的锁是类级别的,不管你创建多少个类的实例,只要有线程在执行这个静态同步方法,其他线程就没法执行该类的任何其他静态同步方法,哪怕是用不同实例调用也不行。

简单说,静态把锁的范围从「单个实例」升级到了「整个类」。

两个线程能不能同时执行m1和m2?

答案是完全可以!

原因很直白:m1()是静态同步方法,它占的是「类的Class对象锁」;m2()是实例同步方法,它占的是「调用它的那个对象实例锁」。这两个锁是完全独立的两个对象,互相没有竞争关系。

举个实际场景:线程A直接调用YourClass.m1()(静态方法),拿到了YourClass.class的锁;同时线程B创建了一个YourClass实例,调用instance.m2(),拿到的是这个instance对象的锁——这俩操作互不影响,两个线程可以同时跑这两个方法,谁也不会阻塞谁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:16:10