请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于同一对象执行加synchronized方法或代码块顺序问题

同一对象执行带有synchronized的方法或代码块,一定时先执行完一个方法或者代码块再执行另一个,不会交替执行,这是为什么?
图片描述图片描述

正在回答 回答被采纳积分+3

2回答

Jimin 2019-05-31 21:12:29

你好,这里的锁都是全局锁,全局锁只有谁拿到锁谁才可以执行,执行完才释放锁,这时其他线程才可能抢到锁去执行。这个例子还有一点是,拿到一个锁后会执行一个for循环,执行10次普通的顺序log输出,这个执行是不会被打断的,因为全局锁在这个过程中是没释放的。

0 回复 有任何疑惑可以回复我~
  • 那为什么两个不同的对象example1和example2的时候就会交替执行呢?按道理不也是一个线程拿到锁以后先执行完一个完整的for循环,之后另外一个线程再拿到锁执行一个完整的for循环
    回复 有任何疑惑可以回复我~ 2021-05-25 19:33:17
  • 是不是因为,对于两个相同的对象,对于这个对象一次有且只能有一个线程占用执行,而由于是全局锁,所以对一个for循环,相当于是在跑单线程。而两个不同对象就可以有两个同等地位的全局锁,两个线程各自跑自己的,所以会交替执行?望老师解答
    回复 有任何疑惑可以回复我~ 2021-05-25 19:38:03
  • 哦,我好像看了JVM的知识知道是为什么了,一个obj只能对应一个monitor,谢谢老师
    回复 有任何疑惑可以回复我~ 2021-05-25 21:15:23
提问者 d_chocolate 2019-05-29 00:27:37

或者说,不可中断锁,在不同对象调用同一个带锁方法的时候,为什么会交替执行

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信