同一个类里面两个synchronized方法,两个线程同时访问的问题

代码如上所示,MyObject类有两个方法,分别创建两个线程调用方法A和方法B:

会有以下几种情况:

1、两个方法都没有synchronized修饰,调用时都可进入:方法A和方法B都没有加synchronized关键字时,调用方法A的时候可进入方法B;

2、一个方法有synchronized修饰,另一个方法没有,调用时都可进入:方法A加synchronized关键字而方法B没有加时,调用方法A的时候可以进入方法B;

3、两个方法都加了synchronized修饰,一个方法执行完才能执行另一个:方法A和方法B都加了synchronized关键字时,调用方法A之后,必须等A执行完成才能进入方法B;

4、两个方法都加了synchronized修饰,其中一个方法加了wait()方法,调用时都可进入:方法A和方法B都加了synchronized关键字时,且方法A加了wait()方法时,调用方法A的时候可以进入方法B;

5、一个添加了synchronized修饰,一个添加了static修饰,调用时都可进入:方法A加了synchronized关键字,而方法B为static静态方法时,调用方法A的时候可进入方法B;

6、两个方法都是静态方法且还加了synchronized修饰,一个方法执行完才能执行另一个:方法A和方法B都是static静态方法,且都加了synchronized关键字,则调用方法A之后,需要等A执行完成才能进入方法B;

7、两个方法都是静态方法且还加了synchronized修饰,分别在不同线程调用不同的方法,还是需要一个方法执行完才能执行另一个:方法A和方法B都是static静态方法,且都加了synchronized关键字,创建不同的线程分别调用A和B,需要等A执行完成才能执行B(因为static方法是单实例的,A持有的是Class锁,Class锁可以对类的所有对象实例起作用)

 

总结:

同一个object中多个方法都加了synchronized关键字的时候,其中调用任意方法之后需等该方法执行完成才能调用其他方法,即同步的,阻塞的;

此结论同样适用于对于object中使用synchronized(this)同步代码块的场景;

synchronized锁定的都是当前对象!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun cat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值