在工作中 IntelliJ
我无法检查该线程是否持有锁。
在eclipse GUI上有一个 lock
像图标一样贴在线上,告诉我们它正拿着那个 lock
.
在下面的代码快照中,我的线程位于 notifyElementAdded()
并持有锁,但在线程堆栈中,没有这样的Icon或暗示,从 Intellij
所以我的问题是如何在IntelliJ GUI上检查同样的问题。
实际上有一个布林属性的 Thread
Java中的类 - Thread.holdsLock()
. 要想获得持有监视器的线程名称,可以使用下面的代码示例。
public static long getMonitorOwner(Object obj)
{
if (Thread.holdsLock(obj))
{
return Thread.currentThread().getId();
}
}
这可能是一个潜在的功能要求,IntelliJ可以将其包含到他们的GUI产品中。
在程序上,为了验证这一点,你可以使用java.lang.Thread.h holdsLock()方法,如果且仅当当前线程在指定对象上持有监控锁时,该方法才返回true。
public static boolean holdsLock(Object obj)
以下是运行方法的片段,供参考。
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));
}
}