有各种文档描述 Solaris/Linux 上的线程,但没有描述 Windows 实现的文档。我对此一时感兴趣,奇怪的是,如此重要的事情(似乎)没有记录下来。
线程在不同的操作系统上是不一样的 - “一次编写,随处运行”对于线程来说并不正确。
最佳答案
为了最直接地回答您的问题,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/