【发布时间】:2021-08-02 21:08:51
【问题描述】:
我正在使用 JAVA VisualVM 分析我的程序并获得以下有关线程执行的结果:
我不熟悉JAVA如何处理多线程,这里是我的问题:
1.绿色条是否表明线程实际上在相应的时间间隔内运行?如果是这样,那么同时运行的线程数怎么可能大于处理器数(我的笔记本电脑上是 8 个)?
2.是否可以检查线程在哪个处理器上运行?
非常感谢!
【问题讨论】:
-
IIRC 绿色表示“可运行”,即表示:它已准备好在 CPU 上运行,并且可能正在实际运行。换句话说:如果一个核心可用,那么它实际上会运行,但取决于操作系统调度程序。另外:超线程意味着实际运行的线程数量通常是核心数量的两倍。
-
感谢您的回答!如果我可能会问,如何检查线程在哪个处理器上运行,如果在 VisualVM 中不可能,是否有其他方法可以做到这一点?
-
那将是特定于操作系统的。除非操作系统提供了一种将特定线程固定到特定处理器的方法,否则您应该期望它会发生变化......不可预测......取决于系统负载等。但请阅读:stackoverflow.com/questions/8032372
标签: java multithreading jvisualvm