synchronized修饰普通方法和静态方法的区别是什么

1.锁的对象不同

(1)普通方法

修饰的对象是调用该方法的实例对象(即this),这意味着每个实例对象都有自己的锁,因此,如果有多个实例对象调用同一个synchronized修饰的普通方法,它们之间不会相互阻塞(每个对象都持有自己的锁)。

(2)静态方法

当synchronized修饰静态方法时,锁的对象是当前类的Class对象。类的Class对象是唯一的,因此所有该类的实例对象在调用同一个synchronized静态方法时,会共享同一把锁,他们可能会相互阻塞,只有一个线程能够进入方法。

2.性能影响

静态方法的锁通常比普通方法的锁开销更小,因为它锁定的是类而不是实例对象,但这也可能导致更高的争用率,因为所有实例对象都共享同一个锁。
在选择使用synchronized关键字时,需要考虑到线程安全性、性能和应用场景等因素,如果方法操作的是实例对象的私有数据,并且这些私有数据不会被其他实例对象共享,那么使用synchronized修饰普通方法可能更合适,如果方法操作的是静态数据或需要确保整个类的线程安全,那么使用synchronized修饰静态方法可能更合适。

public class Example {  
    public synchronized void synchronizedMethod() {  
        // 普通方法的同步代码块  
    }  
  
    public static synchronized void synchronizedStaticMethod() {  
        // 静态方法的同步代码块  
    }  
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值