Подтвердить что ты не робот

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

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

например.

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

Ответ 1

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

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

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

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

Второе медленнее и имеет уязвимость безопасности.

Ответ 2

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

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