有没有办法使用 Java 本机线程找出您的线程正在运行的处理器(在单个系统上还是在多个系统上)?如果没有,是否有任何图书馆可以提供帮助?
Abhinav
问问题
3102 次
4 回答
2
JVM 的线程调度程序是特定于 JVM 的,因此没有“通用”解决方案。据我所知,没有现成可用的东西,但可能使用:
- 太阳 JVM;
- Solaris - 或 Mac,正如 Tom Hawtin - tackline指出的那样;
- 跟踪。
你可能有一些运气:
- 跟踪一个
thread-start
探针,它具有args[3]
“本机/OS 线程 ID。这是主机操作系统分配的 ID” - 使用特定于 Solaris 的实用程序将本机/OS 线程 ID 映射到 CPU。
于 2009-06-10T08:30:55.047 回答
0
据我所知,标准 JDK 不支持它(至少到 JDK 6)。如果这是您真正需要的,您可能需要使用 JNI 执行一些本机调用。可以在此处找到一个很好的示例(虽然它并不完全是您所需要的,但我相信这是一个好的开始)。
顺便说一句,您可以从 JDK 获得很多其他信息,使用 ThreadMXBean 类(例如每个线程的 CPU 使用率),也许您可以在那里找到您要查找的信息。
于 2009-06-10T09:24:16.517 回答
0
操作系统将在不同的时间在不同的处理器上调度线程。因此,即使您获得了每个线程在任何给定时刻运行位置的快照,它也可能在几毫秒内过时。
您要解决的问题是什么?也许可以做你想做的事而不必知道这一点。
于 2009-06-12T02:56:06.800 回答
0
我从来没有听说过这样的调用,而且我非常怀疑是否有这样的调用,因为它并不是真正必要的,并且需要额外的特定于平台的代码。
于 2009-06-10T08:25:05.247 回答