synchronized()为什么写this锁定的不应该是代码块么,写对象有什么作用呢

synchronized()为什么写this锁定的不应该是代码块么,写对象有什么作用呢

synchronized()为什么写this锁定的不应该是代码块么,写对象有什么作用呢

正在回答

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

2回答
synchronized( ){
}

小括号里写的是同步监视器,任何一个对象都可以,所以当前对象this可以用来充当锁(同步监视器)

大括号里的才是需要同步的代码块

好帮手慕小尤 2020-05-13 19:18:52

同学你好,synchronized会对对象加锁,同一时刻只有一个线程能访问该对象。

    如:直接在方法上加synchronized锁的就是当前的实例对象,当传入的是同一个实例对象时,两个进入这个方法后,两个线程不会同时进行,而如果传入的是不同的对象,则两个线程还是并行的跑的,就像在一个银行大厅中,两个人还是各自干各自的事情,但说话声会在同一个大厅中。假如有个录音设备,那么:
     A:你好  ,我来取钱  。另一办业务的客户B:可能就在A说出 “你好” 的时候,说“你好,我来存款。” 如果B说话很快的话,录音出来了就会是“你好”“你好,我来存款”“我来取钱”。他们两个是同时进行的,但在业务上是互不干扰的。只是因为使用同一个控制台,所以交替输出了。但假如客户始终是一个人,则它就会说,“你好,我是来取钱的”,“你好,我是来存钱的”。

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

  • 提问者 warren_au #1
    修饰一个代码块,被修饰的代码块称为同步代码块,作用范围是大括号{}括起来的代码; 修饰一个方法,被修饰的方法称为同步方法,其作用范围是整个方法; 修改一个静态方法,作用范围是整个静态方法; 修改一个类,作用范围是synchronized后面括号括起来的部分 这些用起来效果都一样吗?加载方法前面也是锁定当前对象不是方法?
    2020-05-13 19:24:16
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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