是受保护代码还是对象?
有人说是代码 有人说是对象,请问是什么呢
1
zxc1234 OP |
2
hqweay 2019-07-27 18:16:32 +08:00 via Android
两篇说的是不同角度,第一篇也说的锁对象。锁代码是和 锁变量 对比的答案吧。
|
3
xaw483051011 2019-07-27 18:21:02 +08:00 via iPhone
我觉得叫资源
|
5
leonme 2019-07-27 18:40:02 +08:00 via Android
资源比较合适,是代码块,方法,对象的总称,看你怎么用吧
|
6
cxtrinityy 2019-07-27 18:44:00 +08:00 1
synchonized 拿到指定对象持有的锁,来锁定特定代码块的执行,这样说比较容易理解
|
7
misaka19000 2019-07-27 19:09:57 +08:00
|
8
misaka19000 2019-07-27 19:10:18 +08:00
@misaka19000 #7 一起 -> 以前
|
9
zhgg0 2019-07-27 19:39:08 +08:00
锁的信息记录在对象里。加锁时,将当前线程相关信息记录在对象里,执行完这段代码,将该信息去掉。
普通方法锁信息记录在当前实例里,static 方法锁信息记录在 class 对象里,代码块锁信息记录在你传的那个对象里。 |
10
ghui 2019-07-27 20:04:18 +08:00 via iPhone
简单理解:锁住的就是代码。
不同的是用什么作为锁,可以是 class 对象,可以是实例对象,也可以是你自己 new 的一个普通 object。通常情况下锁的力度尽可能小,这样可以减少不必要的锁等待 |
11
lhx2008 2019-07-27 20:41:22 +08:00
我更倾向于理解为锁只是个代码逻辑的通路,相当于一个红绿灯,代码经过这里都要检查,是要放行还是阻塞,就是这么简单。
|
12
v5mark 2019-07-27 21:11:55 +08:00
物理上锁的是对象,逻辑上锁的是代码
|
13
troywinter 2019-07-28 02:49:43 +08:00
兄弟,你这说法挺有意思,我还是第一次听说,锁的当然是对象,代码块只是用来说明这个锁的作用域,和锁住哪个对象没有关系,想象成现实世界的锁,你锁的只是那把锁,至于锁住的作用是一个房间还是一栋楼跟这把锁没有太大关系,在代码里只和你什么时候入锁什么时候出锁有关系。
另外,这是面试题吗? |
14
zhengxiaowai 2019-07-28 08:47:52 +08:00
临界区比较合适
|
15
davy1995 2019-07-28 10:21:49 +08:00 via Android
临界区代码
|
16
rayu 2019-07-28 10:47:17 +08:00 via Android
锁不一样,class 或者对象
|
17
bobuick 2019-07-28 15:17:34 +08:00
锁或者同步概念, 都是计算机中竞态互斥. 不要就盯着个语言看. 本质是临界区的互斥, 各个语言通过关键字后, 自己实现与总线和 cpu 缓存关于临界区内容的定义. 锁一个变量, 变量就是临界区内的数据值, 锁一个对象, 对象就是临界区的数据.
|
18
tyrantZhao 2019-07-28 17:16:48 +08:00
一般不都是临界资源的吗?
|
19
zxc1234 OP @troywinter 是面试题,阿里的
|
20
zxc1234 OP @misaka19000 赞,拜读了
|
21
zxc1234 OP |
22
22F41628gA98q4Lx 2019-07-30 05:55:38 +08:00
所谓的锁只是一个标志,告诉你这里面有人罢了。
你要是问锁住了什么东西是没有任何意义的。因为所谓的锁只是一个标识符,只是一个变量。 那个问你锁住什么的面试官真的是 naive。 |