我们在JAVA中有一个multithreading应用程序,它有多个并行运行的线程。 现在我们想要在单个内核上运行所有这些线程。 目前应用程序运行在具有多于一个内核的系统上。
我们知道.Net Framework中有一项可用的ProcesAffinity技术来设置进程相关性。
但是我们不想依赖.Net Framework,因为我们的应用程序是用java编译的。
我们是否使用Bat文件设置Process亲和力,并通过Bat文件运行我们的应用程序可执行jar文件?
目前我们的应用程序正在Window XP上运行。 所以我们需要一个在XP平台上工作的解决scheme。
编辑:
这是可能的:请参阅Java线程亲和力
纯Java不支持在特定处理器上运行线程。 检查上面链接的SO问题。
就个人而言,我不认为这个不能用纯Java设置的事实是一件坏事,对于我来说,一个应用程序的运行方式非常依赖于操作系统,所以一个操作系统特定的解决方案不是坏事。
您可以使用MS psexec实用程序设置亲和力:
psexec -a 1 java -jar myapplication.jar
将指示所有由java创建的线程将在最低的CPU上运行。
而这一行将是你的.BAT文件…
你不能用纯Java来做。 但在某些版本的Windows上,可以通过操作系统实用程序来完成; 请参阅https://superuser.com/questions/309617/how-to-limit-a-process-to-a-single-cpu-core …您可以通过JNI调用本地库来完成此操作。