Java多线程程序如何使用多个CPU内核?

Tom*_*icz 17 java multithreading jvm

有人可以解释一下,当JVM只是Linux上的单个进程时,Java多线程程序(例如Tomcat servlet容器)能够使用CPU的所有内核吗?是否有任何好的深入文章详细描述了这个主题?

编辑#1:我不是在寻找如何在Java中实现多线程程序的建议.我正在寻找JVM内部如何在linux/windows上使用多个内核同时仍然是操作系统上的单个进程的解释.

编辑#2:我设法找到的最佳解释是Hotspot(Sun/Oracle JVM)使用NPTL在Linux上将线程实现为本机线程.因此,Java中的每个线程都是Linux上的轻量级进程(本机线程).使用ps -eLf命令可以清楚地看到打印输出不仅处理id(PPID)而且还处理本机线程id(LWP).

更多细节也可以在这里找到:

编辑#3:维基百科在NPTL上有简短但很好的条目,还有一些参考文献http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library

Joa*_*uer 11

Linux内核支持线程作为一等公民.事实上,对于内核,线程与进程没有太大的不同,除了它与另一个线程/进程共享一个地址空间.

ps默认情况下,某些旧版本甚至为每个线程显示一个单独的进程,较新的版本可以使用该-m标志启用此行为.