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

时间:2012-11-05 09:54:06

标签: java multithreading java-ee

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

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

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

3 个答案:

答案 0 :(得分:7)

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

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

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

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

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

编辑:当然,JVM 实现本身(即JRE) 依赖于平台。它提供了允许纯Java程序不关心平台细节的层。要实现这一点,JRE 必须特定于其形式。

答案 1 :(得分:3)

  

... Java通常会使用本机线程,但在某些操作上   它使用的系统称为“绿色线程”,JVM处理它   本身并由一个本机线程执行。

     

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

摘自JVM & Java Threads Scheduling

答案 2 :(得分:3)

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

如果编写安全的多线程代码,代码只依赖于Java语言规范和库API中承诺的内容,那么平台的选择当然会影响性能,但不能影响它的功能。< / p>