java OS线程调度程序是否被JVM覆盖?
根据以下资源,线程调度由操作系统或JVM或两者完成
一,http://tutorials.jenkov.com/java-concurrency/creating-and-starting-threads.html
二,https://www.javatpoint.com/thread-scheduler-in-java
我的问题:
一,。谁安排线程
二,。线程调度程序是否在任何地方被覆盖?(类似于被JVM线程调度程序覆盖的OS线程)
三,。如何从抢占式调度更改为时间切片调度?反之亦然
# 1 楼答案
操作系统。不过,在应用程序级,JRE可以根据线程优先级安排应用程序级线程;不过,它最终还是会被操作系统的调度器(调度块)调度。用户级线程由用户级库管理,但它们仍然需要内核系统调用才能运行
Java运行时环境支持一种非常简单、确定性的调度算法,称为固定优先级调度。实际的调度程序在操作系统中是唯一的;并且从整体的角度而不是从Java/应用程序级别的角度来看线程的调度
除非修改操作系统内核(这是较低级别的东西),否则无法更改调度程序的调度性质。即使在JRE中,也不能在应用程序级别更改线程调度
归属:^{}
# 2 楼答案
JVM调度Java线程(尽管实际上是由操作系统来执行)
没有单一的Java虚拟机;JVM是一种规范,它有多种实现,包括OpenJDK版本和Sun版本等。任何合理的JVM都会简单地使用操作系统提供的底层线程机制,否则可能会有差异,这意味着UNIX(Mac OS X、Linux等)上的POSIX线程(pthreads)和Windows上的WIN32线程。通常,默认情况下,这些系统使用循环策略
三,。通常,JVM不执行任何调度。这就是操作系统的任务。 例如,Linux有可配置的调度选项,如果您想添加 一个新的调度策略,你可以改变内核
但是,根据您为什么要这样做,您可以解决问题 另一种方法,例如使用自定义执行器或反应器样式的框架,或 有效地禁用CPU调度并用Java完成所有工作 你自己