Java平台中的线程是否依赖?

很明显,OS调度/线程算法会对Java线程产生影响

我们可以安全地说线程是OS /机器依赖的吗?

如果是这种情况那么它不会使Java平台依赖吗?

是的,Java中线程调度的细节取决于JVM实现以及(通常)OS实现。

但是 ,Java SE规范中也没有规定该调度的细节,只指定了一些选定的基本规则。

这意味着只要操作系统特定的调度符合这些基本规则,它也符合JVM规范。

如果您的代码依赖于JVM规范中指定的调度细节,则它取决于实现细节,并且无法在任何地方工作。

这与文件I / O的情况几乎相同:如果您对路径进行硬编码并使用固定的目录分隔符,那么您的工作范围超出了规范,并且不能指望您的代码能够跨平台工作。

编辑: JVM 实现本身(即JRE)当然依赖于平台的。 它提供了允许纯Java程序不关心平台细节的层。 为实现这一目标,JRE 必须具体。

… Java通常使用本机线程,但在某些操作系统上,它使用所谓的“绿色线程”,JVM自行处理并由单个本机线程执行。

你不应该担心这个。 它全部由JVM处理,对程序员来说是不可见的。 我能想到的唯一真正的区别是,在使用绿色线程的实现中,multithreading分而治之算法不会带来性能提升。 但是,对于使用本机线程但在具有单核心的计算机上运行的实现,同样缺乏性能增益也是如此。

摘自JVM和Java线程调度

即使在同一平台上,如果编写不安全的multithreading代码,行为也可能取决于完整的配置细节,机器负载的其余部分以及运气,以及硬件和操作系统。 一天不安全的程序可以正常工作,并且在相同的硬件上以相同的工作负载或多或少的相同工作负载失败。

如果您编写安全的multithreading代码,代码仅依赖于Java语言规范和库API中承诺的内容,那么平台的选择当然会影响性能,但不会影响它的function。