【问题标题】:Is it possible to check on which processor a thread is running in JAVA?是否可以检查线程在 JAVA 中运行在哪个处理器上?
【发布时间】:2021-08-02 21:08:51
【问题描述】:

我正在使用 JAVA VisualVM 分析我的程序并获得以下有关线程执行的结果:

我不熟悉JAVA如何处理多线程,这里是我的问题:

1.绿色条是否表明线程实际上在相应的时间间隔内运行?如果是这样,那么同时运行的线程数怎么可能大于处理器数(我的笔记本电脑上是 8 个)?

2.是否可以检查线程在哪个处理器上运行?

非常感谢!

【问题讨论】:

  • IIRC 绿色表示“可运行”,即表示:它已准备好在 CPU 上运行,并且可能正在实际运行。换句话说:如果一个核心可用,那么它实际上会运行,但取决于操作系统调度程序。另外:超线程意味着实际运行的线程数量通常是核心数量的两倍。
  • 感谢您的回答!如果我可能会问,如何检查线程在哪个处理器上运行,如果在 VisualVM 中不可能,是否有其他方法可以做到这一点?
  • 那将是特定于操作系统的。除非操作系统提供了一种将特定线程固定到特定处理器的方法,否则您应该期望它会发生变化......不可预测......取决于系统负载等。但请阅读:stackoverflow.com/questions/8032372

标签: java multithreading jvisualvm


【解决方案1】:

是否可以检查线程在哪个处理器上运行?

不确定 VisualVM,但您可以使用 jstack utility 获取 Java 线程的操作系统线程 ID。
然后,您可以通过操作系统提供的任何方法找出线程在哪些处理器上运行。

【讨论】:

    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2014-01-15
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多