【问题标题】:Java thread running on which processor?Java 线程在哪个处理器上运行?
【发布时间】:2010-11-01 17:40:21
【问题描述】:

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

【问题讨论】:

  • 感谢大家的回答。我知道我应该更关心的是线程的 CPU 使用率。这只是我出于好奇而问的一个问题:)

标签: java multithreading processor


【解决方案1】:

JVM 的线程调度程序是特定于 JVM 的,因此没有“通用”解决方案。据我所知,没有现成可用的东西,但可能使用:

  • Sun JVM;
  • Solaris - 或 Mac,正如 Tom Hawtin - tackline 指出的那样;
  • DTrace

你可能会有一些运气:

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

【讨论】:

  • dtrace 也可以在 Mac OS X 上使用(可惜 JRE 会落后于时代)。
【解决方案2】:

我从未听说过这样的调用,而且我非常怀疑是否存在,因为它并不是真正需要的,并且需要额外的特定于平台的代码。

【讨论】:

    【解决方案3】:

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

    顺便说一句,使用 ThreadMXBean 类,您可以从 JDK 获得很多其他信息(例如每个线程的 CPU 使用情况),也许您可​​以找到您要查找的内容there

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-08-02
        • 2012-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-27
        • 1970-01-01
        • 2021-11-16
        相关资源
        最近更新 更多