8

有没有办法使用 Java 本机线程找出您的线程正在运行的处理器(在单个系统上还是在多个系统上)?如果没有,是否有任何图书馆可以提供帮助?

4

4 回答 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 回答