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