synchronized 锁住的是是什么

2019-07-27 18:05:22 +08:00
 zxc1234

是受保护代码还是对象?

有人说是代码 有人说是对象,请问是什么呢

3946 次点击
所在节点    酷工作
22 条回复
zxc1234
2019-07-27 18:10:40 +08:00
hqweay
2019-07-27 18:16:32 +08:00
两篇说的是不同角度,第一篇也说的锁对象。锁代码是和 锁变量 对比的答案吧。
xaw483051011
2019-07-27 18:21:02 +08:00
我觉得叫资源
zxc1234
2019-07-27 18:25:16 +08:00
@hqweay 所以 synchronized 锁住的是对象?
leonme
2019-07-27 18:40:02 +08:00
资源比较合适,是代码块,方法,对象的总称,看你怎么用吧
cxtrinityy
2019-07-27 18:44:00 +08:00
synchonized 拿到指定对象持有的锁,来锁定特定代码块的执行,这样说比较容易理解
misaka19000
2019-07-27 19:09:57 +08:00
。。。。看一下我一起写的一篇文章吧

https://www.nosuchfield.com/2017/03/22/Future-mode-in-Java/
misaka19000
2019-07-27 19:10:18 +08:00
@misaka19000 #7 一起 -> 以前
zhgg0
2019-07-27 19:39:08 +08:00
锁的信息记录在对象里。加锁时,将当前线程相关信息记录在对象里,执行完这段代码,将该信息去掉。
普通方法锁信息记录在当前实例里,static 方法锁信息记录在 class 对象里,代码块锁信息记录在你传的那个对象里。
ghui
2019-07-27 20:04:18 +08:00
简单理解:锁住的就是代码。

不同的是用什么作为锁,可以是 class 对象,可以是实例对象,也可以是你自己 new 的一个普通 object。通常情况下锁的力度尽可能小,这样可以减少不必要的锁等待
lhx2008
2019-07-27 20:41:22 +08:00
我更倾向于理解为锁只是个代码逻辑的通路,相当于一个红绿灯,代码经过这里都要检查,是要放行还是阻塞,就是这么简单。
v5mark
2019-07-27 21:11:55 +08:00
物理上锁的是对象,逻辑上锁的是代码
troywinter
2019-07-28 02:49:43 +08:00
兄弟,你这说法挺有意思,我还是第一次听说,锁的当然是对象,代码块只是用来说明这个锁的作用域,和锁住哪个对象没有关系,想象成现实世界的锁,你锁的只是那把锁,至于锁住的作用是一个房间还是一栋楼跟这把锁没有太大关系,在代码里只和你什么时候入锁什么时候出锁有关系。

另外,这是面试题吗?
zhengxiaowai
2019-07-28 08:47:52 +08:00
临界区比较合适
davy1995
2019-07-28 10:21:49 +08:00
临界区代码
rayu
2019-07-28 10:47:17 +08:00
锁不一样,class 或者对象
bobuick
2019-07-28 15:17:34 +08:00
锁或者同步概念, 都是计算机中竞态互斥. 不要就盯着个语言看. 本质是临界区的互斥, 各个语言通过关键字后, 自己实现与总线和 cpu 缓存关于临界区内容的定义. 锁一个变量, 变量就是临界区内的数据值, 锁一个对象, 对象就是临界区的数据.
tyrantZhao
2019-07-28 17:16:48 +08:00
一般不都是临界资源的吗?
zxc1234
2019-07-30 00:17:48 +08:00
@troywinter 是面试题,阿里的
zxc1234
2019-07-30 00:18:12 +08:00
@misaka19000 赞,拜读了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586754

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX