我从许多关于多线程的文章中了解到,当一个线程被执行时,它将由一个可用的逻辑处理器(或核心)处理。每个超级逻辑处理器或2个线程。
但是,当我在Java VisualVM中看到Thread Tab,有21个Threads(用户创建的线程)一次被标记为“正在运行”时,我会感到困惑。因为我的笔记本电脑中只有4个逻辑处理器。
我的处理器是Intel(R)Core(TM)i5-3210M CPU @ 2.50GHz 2.50GHz,支持超线程技术,它一次只能处理8个线程。
如何发生这种情况?
如果我的理解不正确,请告诉我。
答案 0 :(得分:2)
它只是意味着线程正在运行(而不是睡觉或等待某些事情)。它并不意味着所有线程实际上同时被执行,因为你没有那么多核心。他们都会竞争时间片来执行。
答案 1 :(得分:2)
VisualVM只从JVM视图中了解线程,因此不会反映操作系统执行的任何实际调度。拥有那么多正在运行的线程只意味着有21个线程可以安排立即由操作系统完成工作。
您可以查看Thread.State
的javadoc,了解各种状态对JVM的意义。