V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
michaelxuan
V2EX  ›  程序员

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

  •  
  •   michaelxuan · 2019-12-26 17:13:59 +08:00 · 2420 次点击
    这是一个创建于 919 天前的主题,其中的信息可能已经有所发展或是发生改变。

    求大佬讲解

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

    "Thread-1":
    waiting to lock [email protected] ([email protected], a java/lang/Object),
    which is held by "Thread-0"
    "Thread-0":
    waiting to lock [email protected] ([email protected], a java/lang/Object),
    which is held by "Thread-1"

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



    就可以看出来 lock 对象是谁,这里的例子就是两个对象,因为这里的例子是分别持有对方的锁,如果是同一个对象就是同一个锁了。
    luozic
        5
    luozic  
       2019-12-26 18:32:13 +08:00
    這個判斷是指人的判斷,還是 Java 程序内部判斷?
    phantomzz
        6
    phantomzz  
       2019-12-26 19:45:35 +08:00
    建议 “持有” --> "竞争"
    yinaqu
        7
    yinaqu  
       2019-12-27 10:02:18 +08:00
    使用 Thread 提供的静态方法 holdsLock(Object obj)可以判断当前线程是否持有所传参数的对象锁。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1167 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:20 · PVG 07:20 · LAX 16:20 · JFK 19:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.