我们在JAVA中有一个多线程应用程序,它有多个并行运行的线程。现在我们想在一个核心上运行所有这些线程。目前,应用程序正在具有多个核心的系统上运行。
我们知道.Net Framework中有一种可用的ProcesAffinity技术来设置进程关联。
但我们不想依赖.Net Framework,因为我们的应用程序是用java构建的。
我们是否使用Bat文件设置Process affinity并通过Bat文件运行我们的应用程序可执行jar文件?
目前我们的应用程序正在Window XP上运行。所以我们需要一个在XP平台上运行良好的解决方案。
答案 0 :(得分:4)
答案 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调用本机库来实现此目的。