java - 是否有在 Windows XP 下运行的 Java 线程模型的规范?

标签 java multithreading documentation

有各种文档描述 Solaris/Linux 上的线程,但没有描述 Windows 实现的文档。我对此一时感兴趣,奇怪的是,如此重要的事情(似乎)没有记录下来。

线程在不同的操作系统上是不一样的 - “一次编写,随处运行”对于线程来说并不正确。

参见http://java.sun.com/docs/hotspot/threads/threads.html

最佳答案

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

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

我发现 Windows 和 Linux 下的线程在使用等待/通知的线程饥饿方面存在显着的经验差异。当许多线程争夺单个锁时,Linux显着更容易出现饥饿问题 - 以至于我必须在 Windows 中加载 3数量级线程才能导致比 Linux 更饥饿。对于竞争激烈的锁,具有 fair 修饰符的 Java 并发锁变得至关重要。

为了说明数字,我在 Linux 下遇到了问题,一个锁被 31 个线程严重竞争,而 Windows 下的相同代码需要 10,000(是的,那就是 10)线程才能开始演示饥饿问题.

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

大多数情况下,根据我的经验,线程是透明的,但争用问题值得仔细考虑。

关于java - 是否有在 Windows XP 下运行的 Java 线程模型的规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67183/

相关文章:

java - 榛树数据分布

.net - Windows服务和线程编程.NET

c# - Visual Studio 2008 中的工具提示文档 - 信息不足

python - 文档字符串 - 一行与多行

swift - Swift 中 block 参数文档的标记格式是什么?

java - 如何让 Java WebService 真正向我显示来自代理对象的异常?

java - EclipseLinke :No resource files named META-INF/services/javax. persistence.spi:找不到 PersistenceProvider

c++ - OpenCV:如何对带有图像的文件夹进行批处理?

java - 如何使用 Jackson 和默认类型对 EnumMap 进行(反)序列化?

c++ - 为什么 50 个线程比 4 个线程快?