2012-12-20 85 views
1

我们在JAVA中有一个多线程应用程序,它有多个并行运行的线程。现在我们想要在单个内核上运行所有这些线程。目前应用程序正在具有多于一个Cores的系统上运行。在一个CPU上运行Java线程

我们知道有.NET Framework中的技术可用ProcesAffinity设置进程关联。

但我们不想依赖于.Net框架,因为我们的应用是建立在Java。

难道我们使用.bat文件设置进程的亲和力,并通过蝙蝠运行应用程序可执行的JAR文件的文件?

目前,我们的应用程序在Windows XP操作系统上运行。所以我们需要一个在XP平台上工作良好的解决方案。

+1

可能重复:http://stackoverflow.com/questions/2255810/how-to-force-two-java-threads-to-run- on-same-processor-core –

+0

查看Peter Lawrey的[线程关联](https://github.com/peter-lawrey/Java-Thread-Affinity)项目。 –

回答

4

编辑:

这是可能的:见Java thread affinity


纯Java不支持运行在特定的处理器线程。检查上面链接的SO问题。

+1

这是可能的:http://stackoverflow.com/a/6894925/540873 –

+0

@ThomasJungblut:谢谢。 – Azodious

+0

这允许您将密钥线程限制/分配给核心上的特定内核或cpus,但不会重新分配JVM线程,例如。 GC线程。 –

1

就个人而言,我不认为这样的事实,这不能用纯Java设置是一件坏事,因为对我来说,一个应用程序的运行方式确实非常依赖于OS,等于是一个OS专用解决方案并不是一件坏事。

可以使用MS psexec实用程序设置的亲和力:

psexec -a 1 java -jar myapplication.jar 

会指示所有被Java创建的线程将最低的CPU上运行。

而且这条线将是你的.bat文件...

+0

beny23再次为Psexec我们需要.net框架来运行psecxec.exe文件 – KHALID