Java Visual VM中的实际运行线程

时间:2017-10-22 16:15:59

标签: java multithreading jvisualvm

我从许多关于多线程的文章中了解到,当一个线程被执行时,它将由一个可用的逻辑处理器(或核心)处理。每个超级逻辑处理器或2个线程。

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

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

enter image description here

如何发生这种情况?

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

2 个答案:

答案 0 :(得分:2)

它只是意味着线程正在运行(而不是睡觉或等待某些事情)。它并不意味着所有线程实际上同时被执行,因为你没有那么多核心。他们都会竞争时间片来执行。

答案 1 :(得分:2)

VisualVM只从JVM视图中了解线程,因此不会反映操作系统执行的任何实际调度。拥有那么多正在运行的线程只意味着有21个线程可以安排立即由操作系统完成工作。

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