java - 通过 Id 获取线程

标签 java jmx

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

相关文章:

Java 的 readInt() 在 C 中是否等效?

java - 使用 if else 语句终止程序?

spring - 如何在 Websphere ND 8.5 中运行 Spring Batch 管理

java - 尝试以编程方式通过 jmx 访问 kafka 指标时出错

json - openjdk-1.8.0 中无法使用 JSONObject 和 JSONException

java - ArrayList.trimToSize() 方法

java - 线程中出现异常 "thread-4"java.lang.NullPointerException

java - 获取调用 JMX 操作的用户的详细信息

java - 维护远程 MBeanServer 和 JVM 上的 JMX 连接和负载

web-services - "facade webservice"的监控和记录策略?