是否有Java'的规范;在Windows XP下运行的s线程模型在任何地方都可用?

是否有Java'的规范;在Windows XP下运行的s线程模型在任何地方都可用?,java,multithreading,documentation,Java,Multithreading,Documentation,有各种文档描述Solaris/Linux上的线程,但现在没有描述Windows实现的文档。我对这件事有点兴趣,奇怪的是,如此关键的事情(似乎)没有被记录下来 线程在不同的操作系统上是不一样的——“写一次,在任何地方运行”对线程来说都不是真的 请参见相关文档讨论了Solaris线程模型以及VM如何映射到该模型。这与Linux无关。此外,本文档仅讨论性能。无论您选择什么,程序的整体行为都不应改变 Java的公开线程模型在每个平台上都是相同的,并在Java规范中定义。对于Java应用程序,底层操作系统

有各种文档描述Solaris/Linux上的线程,但现在没有描述Windows实现的文档。我对这件事有点兴趣,奇怪的是,如此关键的事情(似乎)没有被记录下来

线程在不同的操作系统上是不一样的——“写一次,在任何地方运行”对线程来说都不是真的


请参见

相关文档讨论了Solaris线程模型以及VM如何映射到该模型。这与Linux无关。此外,本文档仅讨论性能。无论您选择什么,程序的整体行为都不应改变

Java的公开线程模型在每个平台上都是相同的,并在Java规范中定义。对于Java应用程序,底层操作系统应该是完全透明的,即使对于线程也是如此


如果你必须知道的话。。。Sun JVM将其线程1:1映射到Windows线程。它不使用多个进程或光纤。

本文讨论了Solaris线程模型以及VM如何映射到该模型。这与Linux无关。此外,本文档仅讨论性能。无论您选择什么,程序的整体行为都不应改变

Java的公开线程模型在每个平台上都是相同的,并在Java规范中定义。对于Java应用程序,底层操作系统应该是完全透明的,即使对于线程也是如此


如果你必须知道的话。。。Sun JVM将其线程1:1映射到Windows线程。它不使用多个进程或光纤。

与Java线程模型相比,该文档更多地介绍了Solaris线程。所有JVM都会调用为其编写的操作系统的本机线程API,因此一个操作系统线程总是有一个Java线程。文档中的图表显示,直到线程进入操作系统空间,它们才会改变。对于特定于Windows的文档,每个操作系统都可以以不同的方式处理线程。这里是一个很好的起点:

很长一段时间以来,各种风格的*nix都是通过进程而不是实际线程来实现线程的,这些特定的调优参数似乎有助于在Solaris中轻松过渡到较新的线程模型。这使得旧的模型和那些JVM选项过时了


有关热点JVM的JVM选项列表,请查看:。其中很多对于调优长时间运行的应用程序很有用,但如果您不了解它们在做什么,也可能会遇到麻烦。还要记住,JVM的每个实现都可以有一组不同的选项,这些选项在IBM的VM或BEA上是找不到的

该文档比Java线程模型更关注Solaris线程。所有JVM都会调用为其编写的操作系统的本机线程API,因此一个操作系统线程总是有一个Java线程。文档中的图表显示,直到线程进入操作系统空间,它们才会改变。对于特定于Windows的文档,每个操作系统都可以以不同的方式处理线程。这里是一个很好的起点:

很长一段时间以来,各种风格的*nix都是通过进程而不是实际线程来实现线程的,这些特定的调优参数似乎有助于在Solaris中轻松过渡到较新的线程模型。这使得旧的模型和那些JVM选项过时了


有关热点JVM的JVM选项列表,请查看:。其中很多对于调优长时间运行的应用程序很有用,但如果您不了解它们在做什么,也可能会遇到麻烦。还要记住,JVM的每个实现都可以有一组不同的选项,这些选项在IBM的VM或BEA上是找不到的

这实际上取决于特定的JVM实现。我假设您对Sun的Windows JVM感到好奇,我可以肯定地告诉您,Sun JVM将Java线程映射到OS线程


您可以尝试从Java代码中生成几个线程,打开任务管理器,看看发生了什么。

这实际上取决于特定的JVM实现。我假设您对Sun的Windows JVM感到好奇,我可以肯定地告诉您,Sun JVM将Java线程映射到OS线程


您可以尝试从Java代码中生成几个线程,打开任务管理器,看看发生了什么。

为了最直接地回答您的问题,JVM规范故意不定义线程如何实现的精确语义

Sebastion的陈述“Java的公开线程模型在每个平台上都是相同的,并且在Java规范中定义。对于Java应用程序来说,底层操作系统应该是完全透明的,即使对于线程也是如此”,这是不准确的

我发现Windows和Linux下的线程在使用wait/notify导致线程饥饿方面存在显著的经验差异。当许多线程争用一个锁时,Linux明显更容易饿死——以至于我不得不在Windows中加载比Linux多3个数量级的线程才能导致饿死。对于竞争激烈的锁,带有公平修饰符的Java并发锁变得至关重要

为了说明这些数字,我在Linux下遇到了问题,其中一个锁被31个线程严重争夺,而Windows下的相同代码需要10000(是的,这是10000)个线程才能开始演示饥饿问题

更糟糕的是,Linux下有3种不同的线程模型,每种都有不同的特性


在我的经验中,线程一直是透明的,但争用的问题值得仔细考虑。

为了最直接地回答您的问题,JVM规范故意不定义线程如何实现的精确语义

FWIW,塞巴斯蒂安的声明“Jav