Java线程在哪个处理器上运行?

时间:2009-06-10 08:16:34

标签: java multithreading processor

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

4 个答案:

答案 0 :(得分:2)

JVM的线程调度程序是特定于JVM的,因此没有“通用”解决方案。据我所知,没有任何可用的开箱即用,但可能使用:

  • Sun JVM;
  • Solaris - 或Mac,正如 Tom Hawtin - tackline 指出的那样;
  • DTrace
你可能有点运气:

  • 跟踪thread-start探针,其args[3]为“本机/操作系统线程ID。这是主机操作系统分配的ID”
  • 使用特定于Solaris的实用程序将本机/ OS线程ID映射到CPU。

答案 1 :(得分:0)

我从来没有听说过这样的电话,我非常怀疑有一个电话,因为它不是必需的,并且需要额外的平台专用代码。

答案 2 :(得分:0)

据我所知,标准JDK不支持它(至少达到JDK 6)。如果这是你真正需要的,你可能需要使用JNI执行一些本机调用。可以找到一个很好的例子here(虽然它不是你需要的,但我相信这是一个好的开始)。

顺便说一下,使用ThreadMXBean类(比如每个线程的CPU使用率),你可以从JDK获得很多其他信息,也许你可以找到你正在寻找的东西there

答案 3 :(得分:0)

操作系统将在不同时间在不同处理器上调度线程。因此,即使您获得了每个线程在任何给定时刻运行的位置的快照,它也可能在毫秒内过时。

您要解决的问题是什么?也许你可以做你想做的事而不必知道这一点。