【发布时间】:2012-06-27 10:41:51
【问题描述】:
我有一个 Java 应用程序,其中创建了一些线程(通过 new Thread())。使用 ps 我可以看到它们有不同的线程 ID(LWP 列),我想从 Java 应用程序中获取这些 ID。
在我发现的与该主题相关的大多数帖子中(例如,this one),解决方案是使用ManagementFactory.getRuntimeMXBean().getName()。
但是,使用该方法会为我提供主线程的 PID(即使我从其中一个线程调用它),所以它并不能真正解决我的问题。
有什么方法可以获取应用程序创建的每个 Thread 的线程 ID?
是否可以使用 JNI 来完成它?如果我能以某种方式连接到一个可以调用syscall(__NR_gettid) 的C 函数,那可以解决我的问题。我真的不关心可移植性,所以我完全可以接受只适用于 Linux 机器的解决方案。
更新:我实际上已经通过使用 JNI 解决了我的问题。详细信息在我的回答中进行了解释。谢谢大家的建议/cmets。
【问题讨论】:
-
Java 线程可能与操作系统上的实际线程不对应。
-
@nhahtdh 我不是 100% 确定 Java 线程如何映射到 Linux 线程,但至少在我的系统中,它们具有给定的线程 ID,就像 pthread 一样。正如我所说,我并不是真的在寻找便携式解决方案。
-
@betabandido:那么,您是否尝试过实现该 JNI 功能?还是我们应该为您做这些?
-
@NiklasB。我不是要求那个。由于我不再真正习惯于编写 Java 代码,而且我从未接触过 JNI,我只是想知道它是否是一个可行的选择。如果答案是肯定的,我一定会自己去看的。
-
@betabandido:您绝对应该尝试一下。我不明白为什么这不起作用。
标签: java linux multithreading pid