跨平台更改java进程优先级的方法
我需要在独立于另一个java应用程序的JVM中调用.jar文件,这非常消耗CPU,因此它应该以后台优先级运行,以免影响系统的其余部分。有没有跨平台的方法可以做到这一点?我不知道如何设置外部进程的优先级跨平台更改java进程优先级的方法,java,Java,我需要在独立于另一个java应用程序的JVM中调用.jar文件,这非常消耗CPU,因此它应该以后台优先级运行,以免影响系统的其余部分。有没有跨平台的方法可以做到这一点?我不知道如何设置外部进程的优先级Thread但是有一个setPriority方法,因此如果您控制目标应用程序,您可以添加一个开关,告诉应用程序将自己的优先级设置为最小: Thread.setPriority(Thread.MIN\u PRIORITY) 如果它仍然影响系统,我建议您交错一些短的睡眠ing来卸载cpu 另一个选项:
Thread
但是有一个setPriority
方法,因此如果您控制目标应用程序,您可以添加一个开关,告诉应用程序将自己的优先级设置为最小:
Thread.setPriority(Thread.MIN\u PRIORITY)代码>
如果它仍然影响系统,我建议您交错一些短的睡眠
ing来卸载cpu
另一个选项:
如果将目标.jar
放在“启动”应用程序的类路径中,只需在新创建的线程中调用jar文件的main
-方法,然后使用上述方法设置优先级。(即使您不控制目标jar文件的源代码,这也应该有效。)简单的答案是,在Java中没有可移植的方法来更改进程的优先级。(线程-是,进程-否)
如果您的Java应用程序需要启动一个新的JVM来运行CPU密集型应用程序,那么很可能它已经不是完全可移植的。例如,您通常需要提供java
命令(或等效命令)的路径名、-cp
参数(或等效参数)、特定于系统的JVM选项,等等
因此,假设启动JVM的命令已经是不可移植的,那么如果您使用包装器脚本替换该命令,该脚本可以执行操作系统特定的操作来更改启动进程的优先级,这就无关紧要了。(例如,对于UNIX或Linux,您可以简单地使用nice
来启动JVM。)我理解他需要生成另一个进程,而这个方法是针对线程的,所以我认为它不可行……哦。。隐马尔可夫模型。。说得好。我想这只有在有可能为正在执行的程序添加一个开关的情况下才有意义。如果他有正在运行的另一个进程的源,它可以将自己设置为MIN_PRIORITY,对吗?@Dean J-这只影响线程的优先级。进程优先级是一个不同的概念。在“写一次,在任何地方运行”的跨平台意义上,不是。但是制作一小段不可移植的代码,在每个Un*x(包括OS x)和每个Windows机器上都能工作,其实并不难+斯蒂芬C的答案是1。