我在 JMX java 中工作,我通过使用 ThreadMXBean
接口(interface)的 getAllThreadIds ()
方法获取所有线程 ID,但我需要一种方法来终止线程给定的 ID。
例如:
ThreadMXBean tbean;
tbean = ManagementFactory.getThreadMXBean();
long[] IDs=tbean.getAllThreadIds();
//.... I need a way to kill the Threads which have this IDs
最佳答案
你可以试试这个:
public void printAllThreadIds() {
Thread currentThread = Thread.currentThread();
ThreadGroup threadGroup = getRootThreadGroup(currentThread);
int allActiveThreads = threadGroup.activeCount();
Thread[] allThreads = new Thread[allActiveThreads];
threadGroup.enumerate(allThreads);
for (int i = 0; i < allThreads.length; i++) {
Thread thread = allThreads[i];
long id = thread.getId();
System.out.println(id);
}
}
private static ThreadGroup getRootThreadGroup(Thread thread) {
ThreadGroup currentGroup = thread.getThreadGroup();
ThreadGroup parentGroup;
while ((parentGroup = currentGroup.getParent()) != null) {
currentGroup = parentGroup;
}
return currentGroup;
}
但是您应该中断一个线程
,而不是停止
它。
Thread.stop()
方法已弃用,因为它会立即杀死一个Thread
。因此,当前被此 Thread
更改的数据结构可能仍处于不一致状态。中断使线程有机会正常关闭。
关于java - 通过 Id 获取线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18224253/