是受保护代码还是对象?
有人说是代码 有人说是对象,请问是什么呢
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 ![]() 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 graycreate 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 geminikingfall 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。 |