A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

       这里就是所谓的同步锁,防止多线程对一个数据的同时操作,但是我怎么就理解不了这个“上帝锁”,括号里面是随便放个对象就可以?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

9 个回复

倒序浏览
恭喜你答对了,里面可以是随便一个对象。  但是这个对象在各个synchronized里面要相同,这样才能同步

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
Object是所有类的父类,所以叫上帝
回复 使用道具 举报
首先,synchronized()就是对象锁,或者是线程锁。它的作用就是任一线程使用这个方法后,只有当这个线程使用完毕之后,其它线程才能进入使用。
你提到的上帝锁,就是指synchronized()中指定了obj。obj是object的缩写,而object 是java类中的基类,所有类都可以继承object,当你设置形参为object时,其他所有类型都可以传入,因此我们可以用synchronized(obj)来控制所有的线程,因此称之为上帝锁!

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报 1 0
可以理解为上帝就是所有的锁,具体有铁门锁,铜门锁,绳门锁,等各式各样的锁,synchronized中的代码相当于用铁门锁锁住了 ,铜的就开不了,想要开,即要用同样的锁

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
synchronized(obj)。  synchronized()就像一扇门,obj就是开门的钥匙,钥匙只有一个,钥匙可以是任意对象,如果你想开这扇门,你就拿到这个门的钥匙,其他人想要打开这个门,也需要钥匙,钥匙是在你的手中,所以其他人就得等着。如果钥匙有多个,其他人也可以打开这个门。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
首先这个并不是随便放歌对象就可以了的,必须放一个没变的对象并且情况不一样
synchronized修饰方法:
1.非静态方法:  默认的同步监听器对象  this
2.静态方法:  默认的同步监听器对象 是该方法所在类的 Class对象   ooxx.class

若线程是实现方式:
:同步代码块: 同步监听对象可以选 this, 这个方法所在类的Class对象, 选一个不变对象
:同步方法:   此时可以使用synchronized直接修饰 run方法,因为同步监听器 是 this;

若线程时继承方式:
:同步代码块: 这个方法所在类的Class对象, 选一个不变对象
:同步方法:     此时不能使用synchronized直接修饰 run方法

评分

参与人数 1技术分 +2 收起 理由
滔哥 + 2

查看全部评分

回复 使用道具 举报 1 0
榨菜 发表于 2014-2-18 11:07
恭喜你答对了,里面可以是随便一个对象。  但是这个对象在各个synchronized里面要相同,这样才能同步 ...

谢谢您的回答!
回复 使用道具 举报
lei 发表于 2014-2-18 11:39
首先,synchronized()就是对象锁,或者是线程锁。它的作用就是任一线程使用这个方法后,只有当这个线程使用 ...

其实上锁的对象就是要与之相关的对象,谢谢您的回答,有用!
回复 使用道具 举报
廉伟杰 发表于 2014-2-18 13:45
首先这个并不是随便放歌对象就可以了的,必须放一个没变的对象并且情况不一样
synchronized修饰方法:
1.非 ...

谢谢回答!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马