一个Java线程如何检查另一个Java线程的状态,例如另一个是否被阻塞?

Amm*_*mmu 15 java multithreading

这是在接受采访时向我的一位朋友提出的问题.

你怎么知道一个线程是否在同步方法中被阻塞,来自另一个线程?

任何人都可以用一个例子解释一下吗?

Rob*_*rop 20

使用Thread.getState():

Thread.State state = getThreadInQuestion().getState();
if(state == Thread.State.BLOCKED) {
    System.out.println("Blocked");
} else {
    System.out.println("Not blocked");
}
Run Code Online (Sandbox Code Playgroud)

在VM之外,您可以使用该jstack工具获取每个线程的完整线程信息,或者连接到JMX并探索Thread MBean.

  • +1:当然你永远不会看到当前线程被阻止,只有另一个线程. (5认同)