用Java创建的线程在Windows和Linux上的行为是否不同?

2022-09-03 01:59:03

据我所知,Java使用的是操作系统线程(与Erlang相反),这意味着在Windows和Linux上使用Java创建的线程可能行为不同。

Windows 和 Linux 上的 Java 线程有什么区别吗?最大的区别是什么?这可能只是性能上的差异?


答案 1

这是一个非常笼统的问题,所以我会给出一个一般性的答案。

Java在其开发早期从绿色线程切换到本机线程。这并不意味着在Windows和Linux上创建的线程将具有不同的行为,因为这两个平台都将在其各自的JVM实现中使用本机线程。

每个操作系统向 Java 公开的线程接口,以及通过 pthreads 和 Windows 线程进行线程处理的本机接口,也非常相似。

关于两个平台上的线程的最大区别在于,Linux上的所有线程都是一种进程形式。Windows 对线程和进程的处理方式非常不同。

根据我个人的经验,Windows 上的本机线程稍微轻量级一些,并且在单进程应用程序中的性能可能稍好一些。相应地(也许无关紧要),与Linux进程相比,Windows进程非常重量级。


答案 2

JVM向您隐藏所有操作系统差异...

正如之前回答的那样,Windows上的线程是Linux上的重量级线程。

根据经验,繁重的多线程应用程序可能会遇到一些延迟,自动内存垃圾回收器可能会产生巨大的内存峰值。