gpt4 book ai didi

java - 通过 Id 获取线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:00 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com