相关疑难解决方法(0)

虚拟Windows服务器上的Java调度程序执行程序计时问题

我们有一个Java应用程序需要在虚拟(Hyper-V)Windows 2012 R2 Server上运行,以及其他环境.在此虚拟Windows服务器上执行时,似乎遇到了奇怪的计时问题.我们已经将问题跟踪到Java预定执行程序中的不稳定调度:

public static class TimeRunnable implements Runnable {

    private long lastRunAt;

    @Override
    public void run() {
        long now = System.nanoTime();
        System.out.println(TimeUnit.NANOSECONDS.toMillis(now - lastRunAt));
        lastRunAt = now;
    }

}

public static void main(String[] args) {
    ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
    exec.scheduleAtFixedRate(new TimeRunnable(), 0, 10, TimeUnit.MILLISECONDS);
}
Run Code Online (Sandbox Code Playgroud)

此代码应每10ms运行一次TimeRunnable,在服务器上生成如下结果:

12
15
2
12
15
0
14
16
2
12
140
0
0
0
0
0
0
0
0
0
0
0
0
1
0
7
15
0
14
16
2
12 …
Run Code Online (Sandbox Code Playgroud)

java windows hyper-v

15
推荐指数
1
解决办法
683
查看次数

使用Runtime.exec/ProcessBuilder.start以低优先级启动Java进程?

我正在尝试使用ProcessBuilder类通过Java启动外部进程,这很有用.目前正在使用命令运行:

new ProcessBuilder("java", "-jar", jarfile, args);
Run Code Online (Sandbox Code Playgroud)

我想做的就是这样,但要以低优先级开始这个过程.我的程序目前只在Windows上运行,因此我可以使用特定于窗口的解决方案.一些研究建议我使用"start"命令,但是当我尝试从Java执行此操作时,它会给出一个异常,说它是一个无法识别的命令(同样的命令可以从cmd.exe运行).

有没有人知道如何从Java启动进程(特定于Windows,如果需要),具有belownormal优先级?

java windows windows-task-scheduler processbuilder

13
推荐指数
1
解决办法
2万
查看次数

关于Java线程和进程优先级的一些问题

我对线程有一个小问题.在Unix系统上,我们有nice,可用于设置优先级进程.好的,在我的系统上,我调用了一些外部进程,但是,我想为它们设置优先级.在unix中,我可以调用其他ProcessBuilder并设置好我想要的进程,但在Windows中,它是不可能的.

如果我启动一个具有某些优先级的线程,并在ProcessBuilder中使用它,那么该进程将具有与线程相同的优先级?或者还有其他方法可以做到这一点吗?

干杯

java unix windows multithreading

9
推荐指数
1
解决办法
907
查看次数