关于Synchronize关键字的问题

关于Synchronize关键字的问题

老师好, 课上说:1.synchronized用在成员方法上就可以防止其他线程同时访问这个方法对吧?   那我有个问题, 课上例子中saveAccount的成员方法用了synchronized,但两个线程访问的是saveAccount和drawAccount两个方法呀,并没有同时访问saveAccount, 那这个同步效果是如何产生的?   

所以我推测是不是有如下更细节的解释:成员方法用synchronized时, 可以防止这个成员方法中的代码涉及到的对象被同时访问。

正在回答

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

2回答

同学你好,同学的理解是正确的,synchronized 修饰成员方法,达到的目的是“锁定该成员方法所属的对象”,从而其他线程无法对该对象进行修改。

        synchronize作为多线程关键字,修饰以下几种:

        代码块:被修饰的代码块称为同步语句块,其作用的范围是大括号{ }里的代码,作用的对象是调用这个代码块的对象;

        方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象

        静态方法:作用的范围是整个静态方法,作用的对象是这个类的所有对象

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小班 2020-02-03 16:57:56

同学你好,这里同学理解的有偏差,synchronized修饰后的线程同步是指不同线程访问同一个对象,每次只能有一个线程访问这个对象,而不是具体访问这个对象中的某个方法。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 MarcoLiLiLi #1
    谢谢老师的耐心解答, 我想再确认一下看是否理解还有偏差。您的意思是:synchronized 修饰成员方法,达到的目的是“锁定该成员方法所属的对象”,从而其他线程无法对该对象进行修改,对吗? 那synchronized修饰成员方法、静态方法、代码块到达的都是同一个效果吧,即:让其他线程无法对synchronized修饰过的成员方法、静态方法、代码块所属的类对象进行修改,直到修饰的方法/代码块执行完毕。
    2020-02-03 20:14:34
  • 提问者 MarcoLiLiLi #2
    突然想到一个问题, 静态方法被synchronized修饰, 那这个静态方法应该不属于任何实例化的类才对吧, 那是不是就是说被修饰的静态方法其实锁定的仅仅是静态方法所包括的静态成员部分,而不是所有被实例化的类对象? 还是说 也会锁定所有该静态成员所属的实例化的对象?
    2020-02-03 20:30:58
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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