Reputation: 3485
How can I get reference to a Running Thread if I know the ID associated with that Thread?
e.g.
long threadID = 12342;
Thread thread = (What goes here?) getThreadFromId(threadID); //I know this is totally made up
Upvotes: 27
Views: 22220
Reputation: 114
You can use following code in order to get the Thread Name (For e.g. I want to get names of Threads that are in deadlock )
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());
}
Upvotes: -1
Reputation: 12056
You have 2 ways to do it. Both are quite simple:
Old way: get the root thread group you may access Thread.currentThread().getGroup()
..getParent() in loop. and call enumerate(Thread[])
newer (slower though). for (Thread t : Thread.getAllStackTraces().keySet()) if (t.getId()==id)...
The first method has a small problem that due to a bug in ThreadGroup.destroy()
, a ThreadGroup may not enumerate anything at all.
The second is slower and has a security flaw, though.
Upvotes: 19