跨平台方式改变java进程优先级
我需要在另一个Java应用程序的独立JVM中调用.jar文件,并且它非常耗费CPU,因此它应该以后台优先级运行,以免影响系统的其余部分。 有没有跨平台的方法来做到这一点?
简单的答案是没有可移植的方法来改变Java中Process的优先级。 (线程 – 是的,进程 – 没有。)
如果您的Java应用程序需要启动一个新的JVM来运行CPU密集型应用程序,那么它可能已经不是完全可移植的了。 例如,您通常需要提供java
命令(或等效命令)的路径名, -cp
参数(或等效参数),系统特定的JVM选项等。
因此,假设启动JVM的命令已经是不可移植的,那么将命令替换为执行特定于操作系统的事物的包装器脚本以更改已启动进程的优先级应该无关紧要。 (例如,对于UNIX或Linux,您可以使用nice
来启动JVM。)
我不知道为外部进程设置优先级的方法。 但是Thread
有一个setPriority
方法,所以如果你控制目标应用程序,你可以添加一个开关,告诉应用程序将自己的优先级设置为最小值:
theThread.setPriority(Thread.MIN_PRIORITY);
如果它仍然影响系统,我建议你插入一些短暂的sleep
来卸载cpu。
另外一个选择:
如果将目标.jar
放在“initiating”应用程序的类路径中,则只需在新创建的线程中调用jar文件的main
-method,然后使用上述方法设置优先级。 (即使您不控制目标jar文件的源代码,这也应该有效。)