如果我知道与该线程关联的ID,如何获取正在运行的线程的引用?从ID获取对线程对象的引用
例如
long threadID = 12342;
Thread thread = (What goes here?) getThreadFromId(threadID); //I know this is totally made up
如果我知道与该线程关联的ID,如何获取正在运行的线程的引用?从ID获取对线程对象的引用
例如
long threadID = 12342;
Thread thread = (What goes here?) getThreadFromId(threadID); //I know this is totally made up
你有2种方式来做到这一点。 两者都是相当简单:
老办法:让您可以在循环访问Thread.currentThread().getGroup()
..getParent()根线程组。并致电enumerate(Thread[])
更新(尽管较慢)。 for (Thread t : Thread.getAllStackTraces().keySet()) if (t.getId()==id)...
第一种方法有一个小问题,由于在ThreadGroup.destroy()
一个错误,一个线程组可能不枚举任何东西。
尽管如此,第二个速度较慢并且存在安全漏洞。
您可以使用下面的代码,以获得线程名称(例如,我想处于死锁线程的名字)
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());
}