我在工作线程死亡之前调用threadInfo.getBlockedCount()和getBlockedTime().
我得到的阻止计数为1,但阻止时间为0.
这是否意味着线程已被阻塞,但阻塞时间少于一毫秒?
如果以上情况是正确的,是否还有另一种方法来获取线程被阻塞的准确时间?
解决方法:
但是,如果在启动线程之前*调用了MXMXBean#setThreadContentionMonitoringEnabled(true),则线程的阻塞时间(被阻塞)似乎仅返回非零结果.否则,它将始终返回零(如果禁用了竞争监视,则返回-1).下面的代码演示了这一点:
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
public class BlockedTimeMain {
public static void main(String[] _) throws InterruptedException {
ThreadMXBean mbean = ManagementFactory.getThreadMXBean();
final Object lock = new Object();
Thread t = new Thread("Foo") {
@Override public void run() {
// This will block forever
synchronized(lock) {
// Will never get here<