我开始假设单核机器只能运行一个线程。现在我编写了一个基于 java/spring 的 junit 测试,它产生 20 个线程,它们使用 BigDecimal 计算大量的阶乘。
我用 Visual VM 监视了那个 junit,我可以看到所有 20 个线程都在工作,并且在 Visual VM 中显示为正在运行(绿色)。据我了解,jvm 使它们看起来好像都在运行,但在非常精细的级别上,每个线程都将轮流占用 CPU 周期。有没有一种方法或工具可以直观地或通过数字证明所有线程确实相互干扰并且 CPU 从一个线程切换到另一个线程?或者换句话说,我想查看给定数量的执行给定功能的线程,由于 CPU 的极端上下文切换,饱和点或收益递减是多少。
我需要解决的实际问题是在大型 Java 应用程序中调整线程。如果我在示例运行中看不到线程争用,那么我也将无法在大型应用程序中看到线程争用/滥用。