9.49. 怎么检测一个线程是否持有对象监视器
我也是在网上看到一道多线程面试题才知道有方法可以判断某个线程是否持有对象监视器: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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论