在 Java 中如何判断多个线程持有的是同一把锁

2019-12-26 17:13:59 +08:00
 michaelxuan

求大佬讲解

2775 次点击
所在节点    程序员
7 条回复
jorneyr
2019-12-26 17:30:49 +08:00
synchronized 的关联的对象,lock 对象
lihongjie0209
2019-12-26 18:07:04 +08:00
啥? 多个线程持有的 '锁' 还叫锁吗?
apostle
2019-12-26 18:17:04 +08:00
@lihongjie0209 读写锁:我不配当锁啦
luckyrayyy
2019-12-26 18:25:50 +08:00
自带的分析工具就可以,比如 jstack,我找了一个博客上教程的输出结果:
```
Found one Java-level deadlock:
=============================

"Thread-1":
waiting to lock Monitor@0x00007fea1900f6b8 (Object@0x00000007efa684c8, a java/lang/Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock Monitor@0x00007fea1900ceb0 (Object@0x00000007efa684d8, a java/lang/Object),
which is held by "Thread-1"

作者:江溢 Jonny
链接: https://juejin.im/post/5aaf6ee76fb9a028d3753534
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



就可以看出来 lock 对象是谁,这里的例子就是两个对象,因为这里的例子是分别持有对方的锁,如果是同一个对象就是同一个锁了。
luozic
2019-12-26 18:32:13 +08:00
這個判斷是指人的判斷,還是 Java 程序内部判斷?
phantomzz
2019-12-26 19:45:35 +08:00
建议 “持有” --> "竞争"
yinaqu
2019-12-27 10:02:18 +08:00
使用 Thread 提供的静态方法 holdsLock(Object obj)可以判断当前线程是否持有所传参数的对象锁。

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

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

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

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

© 2021 V2EX