Получение идентификатора потока для потоков Java в Linux

У меня есть приложение Java, в котором создаются некоторые потоки (через new Thread( )). Используя ps, я вижу, что у них разные идентификаторы потоков (столбец LWP), и я хотел бы получить эти идентификаторы из приложения Java.

В большинстве сообщений, связанных с этой темой, которые я нашел (например, этот ), решение состоит в использовании ManagementFactory.getRuntimeMXBean().getName().

Однако использование этого метода дает мне PID основного потока (даже если я вызываю его из одного из потоков), поэтому на самом деле это не решает мою проблему.

Есть ли способ получить идентификатор потока для каждого отдельного потока, созданного приложением?

Можно ли использовать для этого JNI? Если бы я каким-то образом мог подключиться к функции C, где я мог бы вызвать syscall(__NR_gettid), это могло бы решить мою проблему. Я действительно не забочусь о переносимости, поэтому я полностью согласен с решением, которое будет работать только на машине с Linux.

ОБНОВЛЕНИЕ: Я фактически решил свою проблему с помощью JNI. Подробности описаны в моем ответе. Спасибо всем за ваши предложения/комментарии.

10
задан Community 23 May 2017 в 11:45
поделиться