在一个CPU上运行Java线程

时间:2012-12-20 09:55:45

标签: java .net windows multithreading parallel-processing

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

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

但我们不想依赖.Net Framework,因为我们的应用程序是用java构建的。

我们是否使用Bat文件设置Process affinity并通过Bat文件运行我们的应用程序可执行jar文件?

目前我们的应用程序正在Window XP上运行。所以我们需要一个在XP平台上运行良好的解决方案。

3 个答案:

答案 0 :(得分:4)

编辑:

有可能:见Java thread affinity


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

答案 1 :(得分:1)

就个人而言,我认为不能在纯Java中设置这一事实是件坏事,对我而言,应用程序的运行方式在很大程度上取决于操作系统,因此特定于操作系统的解决方案这不是一件坏事。

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

psexec -a 1 java -jar myapplication.jar

将指示java创建的所有线程都将在最低CPU上运行。

此行将是您的.BAT文件......

答案 2 :(得分:0)

你不能用纯Java做到这一点。但是在某些版本的Windows上,您可以通过操作系统实用程序来完成;请参阅https://superuser.com/questions/309617/how-to-limit-a-process-to-a-single-cpu-core ...您可以通过JNI调用本机库来实现此目的。