Получить ссылку на объект Thread из его идентификатора

Как получить ссылку на текущий stream, если я знаю идентификатор, связанный с этим streamом?

например

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

У вас есть 2 способа сделать это. Оба они довольно просты:

  • Старый способ: получить группу корневых streamов, к которой вы можете обратиться к Thread.currentThread().getGroup() ..getParent () в цикле. и enumerate(Thread[]) вызов enumerate(Thread[])

  • новее (медленнее, хотя). for (Thread t : Thread.getAllStackTraces().keySet()) if (t.getId()==id)...

Первый метод имеет небольшую проблему, из-за ошибки в ThreadGroup.destroy() ThreadGroup может вообще не перечислять что-либо.

Второй – медленнее и имеет недостаток безопасности.

Вы можете использовать следующий код, чтобы получить имя streamа (например, я хочу получить имена streamов, находящихся в тупике)

 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()); }