如何更改正在运行的java进程的优先级?

And*_*rew 3 java windows process windows-task-scheduler

在一个相关的问题中,我们使用ProcessBuilder探索了使用依赖于操作系统的命令以低优先级启动外部进程.我还发现,如果父进程的优先级较低,那么它生成的所有进程都将以低优先级启动.所以我的新问题是关于以低优先级启动java文件(通过双击Windows中的可执行jar运行)或在运行期间以编程方式更改其优先级.我尝试改变线程优先级,但这对Windows进程优先级没有影响.

我尝试了以下操作,但它不会更改任务管理器中的进程优先级

public class hello{
    public hello(){
        try{
            Thread.currentThread().setPriority(1);
            Thread.sleep(10000);    
        }catch(Exception e){e.printStackTrace();}
    }
}
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一另一件事是使用批处理文件运行程序,但我宁愿把它留在家里也可以这么说.那么有谁知道基于java的方式来改变当前的进程优先级?理想情况下,能够在程序运行时更改进程的优先级以响应用户输入,这将是很好的.

Pet*_*rey 6

也许你正试图做一些操作系统为你做的事情.

在Unix中,在负载下,每个进程都有一个很短的时间片来完成它的工作.如果它使用所有时间片,则假定进程受CPU限制,优先级降低.如果它在IO上阻塞,则假定它是IO绑定并且其优先级被提高(因为它没有使用它的所有时间片)

所有这些只在没有足够的CPU时才有意义.如果在大多数情况下将CPU负载保持在100%以下,则每个进程将获得所需的CPU数量,并且优先级没有太大差别.