有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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线程)

三,。如何从抢占式调度更改为时间切片调度?反之亦然


共 (2) 个答案

  1. # 1 楼答案

    1. who schedules the thread?

    操作系统。不过,在应用程序级,JRE可以根据线程优先级安排应用程序级线程;不过,它最终还是会被操作系统的调度器(调度块)调度。用户级线程由用户级库管理,但它们仍然需要内核系统调用才能运行

    1. does the thread scheduler gets overridden anywhere?(like OS thread being overridden by JVM thread scheduler)

    Java运行时环境支持一种非常简单、确定性的调度算法,称为固定优先级调度。实际的调度程序在操作系统中是唯一的;并且从整体的角度而不是从Java/应用程序级别的角度来看线程的调度

    1. how do i change from preemptive scheduling to time slicing scheduling ? or vice versa?

    除非修改操作系统内核(这是较低级别的东西),否则无法更改调度程序的调度性质。即使在JRE中,也不能在应用程序级别更改线程调度

    归属:^{}

  2. # 2 楼答案

    1. JVM调度Java线程(尽管实际上是由操作系统来执行)

    2. 没有单一的Java虚拟机;JVM是一种规范,它有多种实现,包括OpenJDK版本和Sun版本等。任何合理的JVM都会简单地使用操作系统提供的底层线程机制,否则可能会有差异,这意味着UNIX(Mac OS X、Linux等)上的POSIX线程(pthreads)和Windows上的WIN32线程。通常,默认情况下,这些系统使用循环策略

    三,。通常,JVM不执行任何调度。这就是操作系统的任务。 例如,Linux有可配置的调度选项,如果您想添加 一个新的调度策略,你可以改变内核

    但是,根据您为什么要这样做,您可以解决问题 另一种方法,例如使用自定义执行器或反应器样式的框架,或 有效地禁用CPU调度并用Java完成所有工作 你自己