我们可以更改 JVM 线程调度程序吗?

问题描述 投票:0回答:3

我们可以改变JVM线程调度器吗?假设我的 JVM 使用线程的抢占式调度,那么我可以将其更改为我的自定义线程调度算法吗?或者 JVM 是否为调度程序提供选择?

java multithreading jvm scheduling preemptive
3个回答
7
投票

一般来说,JVM 不做任何调度。这就是操作系统的任务。 例如Linux有可配置的调度选项,如果你想添加新的调度策略,你可以更改内核。

但是,根据您想要这样做的原因,您可以通过其他方式解决问题,例如使用自定义 Executor 或 Reactor 样式框架,或者有效地禁用 CPU 调度并自己在 Java 中完成所有工作。 (不是一个微不足道的话题,很少有用)


5
投票

恕我直言,我们对线程调度没有太多控制权。大多数当代 JVM 在线程调度方面都委托给本机操作系统。我听说一些solaris jvm仍然使用“绿色线程”的概念。这可能是您想要实现的目标的最佳机会。我没有Solaris机器,所以我无法确认。

这归结为两个选择。 1) 以编程方式操作线程的优先级。优先级较高的线程将首先执行。

或者, 修改操作系统设置,如本链接中所述 http://docs.oracle.com/cd/E24290_01/coh.371/e22838/tune_perftune.htm#CACCHIFA


2
投票

我们可以改变JVM的线程调度器吗?

不,因为没有什么可以改变的。它在操作系统中。您可能遇到的任何关于 JVM 线程调度的参考往好里说都是过时了几十年,往坏里说是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.