外部进程使Java消耗大量CPU

外部进程使Java消耗大量CPU,java,multithreading,performance,exec,cpu-usage,Java,Multithreading,Performance,Exec,Cpu Usage,当我试图调试我的多线程Java应用程序为什么会消耗大量CPU时,我发现每个线程都执行一个外部命令,该命令根本不是CPU密集型的,但当Java运行它时,我发现Java运行时占用了我100%的CPU 为了进一步调试,我用简单的Linux“ls”命令替换了这个外部进程。以下是我如何运行它- String[] commands = new String[]{"/bin/sh", "-c", "ls"}; try { Process p = Runt

当我试图调试我的多线程Java应用程序为什么会消耗大量CPU时,我发现每个线程都执行一个外部命令,该命令根本不是CPU密集型的,但当Java运行它时,我发现Java运行时占用了我100%的CPU

为了进一步调试,我用简单的Linux“ls”命令替换了这个外部进程。以下是我如何运行它-

String[] commands = new String[]{"/bin/sh", "-c", "ls"};
            try {
                Process p = Runtime.getRuntime().exec(commands);
             } catch (IOException ex) {
               //
}
不过,我看到Java使用了所有的CPU

我甚至没有从进程中读取任何输出,也没有打开任何类型的流

有什么不对劲吗?为什么从Java外部运行一个简单的
ls
命令会导致Java运行时消耗大量CPU


为了模拟线程处理,我没有运行外部命令,而是尝试放置thread.Sleep(),效果很好-不再占用CPU了

看起来像是一个已知问题,我想我需要使用这个-

更新:

使用java_posix_spawn后,问题消失了