【问题标题】:Actual Running Thread In Java Visual VMJava Visual VM 中实际运行的线程
【发布时间】:2017-10-22 16:15:59
【问题描述】:

从我读过的关于多线程的许多文章中我的理解是,当一个线程正在执行时,它将由一个可用的逻辑处理器(或核心)处理。或每个 hyper-v 逻辑处理器 2 个线程。

但是,当我在 Java VisualVM 中看到 Thread 选项卡时,我感到困惑,即有 21 个线程(用户创建的线程)一次标记为“正在运行”。因为我的笔记本电脑中只有 4 个逻辑处理器。

我的处理器是 Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz 2.50GHz,它支持超线程技术,但它仍然一次只能处理 8 个线程。

这是怎么发生的?

如果我有不正确的理解,请告诉我。

【问题讨论】:

  • 你误会了。可能有数百个线程,操作系统会安排每个线程的工作在一个内核上运行几纳秒,然后是下一个线程,依此类推。
  • 感谢您提供的信息,在这种情况下,我的意思是Java用户创建的线程,它可以被识别为与您上面提到的数百个线程相同吗?
  • 是的。任何“Java 用户创建的线程”实际上都是在 Java 进程创建时由操作系统创建和调度的。

标签: java multithreading jvisualvm


【解决方案1】:

这只是意味着线程正在运行(而不是睡眠或等待某事)。这并不意味着所有线程实际上都在同时执行,因为您没有那么多内核。不过,它们都在竞争执行时间片。

【讨论】:

  • 感谢您的回答。赞赏它。如果有这方面的参考,请告诉我
【解决方案2】:

VisualVM 仅从 JVM 的角度了解线程,因此操作系统所做的任何实际调度都不会反映出来。拥有这么多正在运行的线程仅仅意味着有 21 个线程可以被调度以立即由操作系统完成工作。

您可以查看 Thread.State 的 javadocs,了解各种状态对于 JVM 的含义。

【讨论】:

  • 你的答案和@Kayaman 一样,谢谢。赞赏它。如果有这方面的参考,请告诉我
  • 添加了指向 Thread.State 的链接,用于显示该特定图表。
猜你喜欢
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
相关资源
最近更新 更多