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(); } }