Java – 如何知道线程何时等待?

知道线程何时进入wait状态是否有任何简洁的解决方案? 我正在wait线程,并在需要时notify他们。 但有时我想知道线程当前是否在等待,如果是,我还要做其他事情。

我可能会自己设置一个标志为true / false。 但我无法想象还有更好的方法吗?

线程的getState()方法返回一个Thread.State ,它可以是:

NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING或TERMINATED

请参见Thread.State 。

你看过Thread.getState了吗?

检查

  • public Thread.State getState()
  • Thread.State.WAITING

Thread.State:BLOCKED与WAITING之间的差异

您可以使用ThreadMXBean获得所需的所有信息。

试试这段代码:

 package com.secutix.gui.seatmap; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; public class ThreadStatus { private static final ThreadMXBean mbean = ManagementFactory.getThreadMXBean(); public static void main(String[] args) { for (int i = 0; i < 3; i++) { buildAndLaunchThread(i); } Thread t = new Thread(){ @Override public void run() { while(true){ printThreadStatus(); try { sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; t.setName("detector"); t.start(); } protected static void printThreadStatus() { ThreadInfo[] infos = mbean.dumpAllThreads(true, true); for (ThreadInfo threadInfo : infos) { System.out.println(threadInfo.getThreadName() + " state = " + threadInfo.getThreadState()); } } private static void buildAndLaunchThread(int i) { Thread t1 = new Thread(){ @Override public void run() { while(true){ try { sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; t1.setName("t" + i); t1.start(); } }