从其ID获取对Thread对象的引用

时间:2011-07-12 16:15:14

标签: java android multithreading

如果我知道与该线程关联的ID,我如何才能获得对正在运行的线程的引用?

e.g。

long threadID = 12342;
Thread thread = (What goes here?) getThreadFromId(threadID); //I know this is totally made up

2 个答案:

答案 0 :(得分:13)

你有两种方法可以做到这一点。 两者都很简单:

  • 旧方法:获取您可以在循环中访问Thread.currentThread().getGroup() ... getParent()的根线程组。并致电enumerate(Thread[])

  • 较新(虽然较慢)。 for (Thread t : Thread.getAllStackTraces().keySet()) if (t.getId()==id)...

第一种方法有一个小问题,由于ThreadGroup.destroy()中的错误,ThreadGroup可能根本不会枚举任何内容。

第二种是较慢并且存在安全漏洞。

答案 1 :(得分:-1)

您可以使用以下代码来获取线程名称(例如,我想获取处于死锁状态的线程的名称)

ThreadMXBean threadMB = ManagementFactory.getThreadMXBean();
long threadIds[] = threadMB.findDeadlockedThreads();
for (long id : threadIds) {
     System.out.println("The deadLock Thread id is : " + id
                            + "  > "
                            +       
     threadMB.getThreadInfo(id).getThreadName());
}