9.49. 怎么检测一个线程是否持有对象监视器

发布于 2023-05-16 12:27:24 字数 718 浏览 23 评论 0

我也是在网上看到一道多线程面试题才知道有方法可以判断某个线程是否持有对象监视器:Thread 类提供了一个 holdsLock(Object obj) 方法,当且仅当对象 obj 的监视器被某条线程持有的时候才会返回 true,注意这是一个 static 方法,这意味着 某条线程 指的是当前线程。


也可以通过以下步骤检测一个线程是否持有对象监视器:

1、获取线程持有的所有对象监视器锁。

MonitorInfo[] monitorInfos = ThreadMXBean.getThreadInfo(threadId).getLockedMonitors();

2、遍历所有的对象监视器锁,查找指定的对象监视器锁。

for (MonitorInfo monitorInfo : monitorInfos) {
    if (monitorInfo.getLockedStackDepth() > 0 && monitorInfo.getClassName().equals(className) && monitorInfo.getIdentityHashCode() == Integer.toHexString(object.hashCode())) {
        return true;
    }
}

如果找到了指定的对象监视器锁,则说明线程持有该对象监视器锁。否则,线程不持有该对象监视器锁。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

yili302

文章 0 评论 0

晚霞

文章 0 评论 0

LLFFCC

文章 0 评论 0

陌路黄昏

文章 0 评论 0

xiaohuihui

文章 0 评论 0

你与昨日

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文