在尝试调试我的多线程Java应用程序消耗大量CPU的原因时,我发现每个线程执行的外部命令都不是CPU密集型的,但是当Java运行它时,我发现Java运行时占用了我的100%中央处理器。
为了进一步调试,我用简单的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占用
答案 0 :(得分:0)