synchronized同步锁出现的所有情况,整理总结

synchronized关键字
总结:1.synchronized修饰方法上
2.synchronized修饰在代码块上
(1)修饰对象
(2)修饰类
遇到synchronized同步锁所有情况
(1)作用在同一个实例对象上,两个线程,
一个线程调用synchronized修饰的方法(锁在本类对象上)
另一个线程可以调用非synchronized修饰的方法,
两个线程互不影响,并行,异步
(2)作用在同一个实例对象上,
两个线程都调用synchronized修饰的方法(锁在本类对象上)
两个线程同步,串行
(3)作用在两个实例对象,
分别调用同一个synchronized修饰的方法(锁在两个不同的对象上)
并行,异步
(4)作用在同一个实例对象上,
一个线程调用synchronized修饰的代码块(锁在本类对象上),
一个线程调用没有synchronized修饰的代码块,互不影响,并行,异步
(5)作用在同一个实例对象上,
两个线程,都调用synchronized修饰的代码块(两个都锁在同一个对象上),
两个线程同步,串行
(6)两个实例对象,分别调用同一个synchronized修饰的代码块
并行,异步
(7)作用同一个实例对象上,两个线程,
一个线程调用synchronized修饰的方法(锁在本类对象上)
另一个线程调用synchronized修饰的代码块(锁在本类对象),两个线程同步,串行
(8)作用在同一个实例对象上,三个线程,
第一个线程调用synchronized修饰的方法(锁在本类对象上),
第二个线程调用synchronized修饰的代码块(锁在本类对象),
第三个线程调用synchronized修饰的代码块(锁在Object对象上)
则三个线程,第三个线程与(第二个线程和第三个线程)并行
第二个线程和第一个线程同步,串行执行
(9)作用在同一个实例对象上,三个线程
第一个线程调用synchronized修饰的方法(锁在Object对象上),
第二个线程调用synchronized修饰的代码块(锁在本类对象),
第三个线程调用synchronized修饰的代码块(锁在 new Object对象上和第一个不是同一个Object);
则,三个线程异步,并行执行
以上都是作用在对象上的,接下来锁在类上
(10)作用在同一个类上,
一个线程调用的方法是(给方法加synchronized static 锁在本类上)
另一个线程调用的是代码块(synchronized(本类))
两个线程同步,串行执行
(11)一个线程调用的是给对象加锁,一个线程调用的是给类加锁,两把锁是不同的锁
所以两个线程互不影响应该为异步,并行执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值