Java中Thread
类实际上有一个布尔属性 - Thread.holdsLock()
。
要获取持有监视器的线程名称,可以使用下面的代码示例:
public static long getMonitorOwner(Object obj)
{
if (Thread.holdsLock(obj))
{
return Thread.currentThread().getId();
}
}
这可能是一个潜在的功能请求,希望IntelliJ将其包含到他们的GUI产品中。
从编程角度来看,您可以使用java.lang.Thread.holdsLock()方法进行验证,该方法仅在当前线程持有指定对象上的监视器锁时返回true。
public static boolean holdsLock(Object obj)
以下是参考的run方法代码片段:
public void run() {
/* returns true if thread holds monitor lock */
// returns false
System.out.println("Holds Lock = " + Thread.holdsLock(this));
synchronized (this) {
// returns true
System.out.println("Holds Lock = " + Thread.holdsLock(this));
}
}