synchronized关键字

synchronized关键字

老师你好,你在14:20分说,在方法前加了synchronized,其它线程在这个方法执行完是不允许把他打断的,请问这是什么原理?

我查了synchronized的定义,synchronized只是保证同一时刻只有一个线程可以执行某个方法,和你说的不允许打断理解起来完全不同呀,能帮忙详细解释下么?

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

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕阿园 2021-05-27 11:59:47

同学你好,老师说的意思跟同学查的其实是一样的,只不过描述不同

老师说在方法前加了synchronized,其它线程在这个方法执行完是不允许把他打断的,也就是说在方法前加入synchronized后,同一时间只能有一个线程执行这个方法,其他线程要想执行其他方法或者该方法必须等待该方法执行完毕后才能再执行,在该方法执行期间,其他线程是不能打断这个方法的;

比如,如果不加synchronized,在a线程执行该方法期间,b线程获得cpu执行权,则会被打断,加入后则不允许被打断

祝学习愉快~

  • 提问者 飞飞侠91 #1

    老师,我的疑问点是

    您说:“同一时间只能有一个线程执行这个方法,其他线程要想执行该方法必须等待该方法执行完毕后才能再执行,”

    ​但是本来saveAccount方法和drawAccount方法分别是在不同的线程中执行,同一时间只能执行一个线程,所以saveAccount或者drawAccount肯定不会在同一时间有两个线程去执行,

    那我在执行saveAccount时,时间片时间到了,我可以进入另一个线程去执行drawAccount,这个是否可以?为什么?

    2021-05-27 12:39:40
  • 好帮手慕阿园 回复 提问者 飞飞侠91 #2

    同学你好

    1、并不是同一时间一个线程只能执行一个方法,比如在执行存钱方法时由于某些原因会导致存钱的操作终止,然后继续执行取款的操作,从而导致数据不一致,如下

    http://img1.sycdn.imooc.com//climg/60af326f09591f0b05570178.jpg

    同学可以再回顾下课程的9分左右的视频,老师有讲解哦

    2、给saveAccount添加synchronized关键字就是在saveAccount方法执行完毕后再去执行drawAccount方法

    祝学习愉快~

    2021-05-27 15:09:38
  • 提问者 飞飞侠91 回复 好帮手慕阿园 #3

    老师,我理解存钱是在save线程中执行saveAccount方法的,取钱是在draw线程中执行drawAccount的,两个线程的两个方法分开执行的,他们之间并没有关联。

    我是不是可以理解为加了synchronized的方法在线程执行到该方法时,必须把该方法执行完成才能进入另一个线程?

    2021-05-27 20:55:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师