子子进程中的高CPU负载

时间:2015-08-26 13:04:16

标签: java processbuilder

我正在使用ProcessBuilder运行批处理文件的java程序。

public class Test {

    public static void main(String[] args){
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("pathToMyBatch.bat");
            Process process = processBuilder.start();
            StreamReader fluxSortie = new StreamReader(process.getInputStream());
            StreamReader fluxErreur = new StreamReader(process.getErrorStream());
            new Thread(fluxSortie).start();
            new Thread(fluxErreur).start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class StreamReader implements Runnable {

        private final InputStream inputStream;

        StreamReader(InputStream inputStream) {
            this.inputStream = inputStream;
        }

        private BufferedReader getBufferedReader(InputStream is) {
            return new BufferedReader(new InputStreamReader(is));
        }

        @Override
        public void run() {
            BufferedReader br = getBufferedReader(inputStream);
            String ligne = "";
            try {
                while ((ligne = br.readLine()) != null) {
                    System.out.println(ligne);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

StreamReader类是Runnable,等待输入并打印每条读取线。

Thebatch文件只需调用java -classpath...即可启动其他java应用程序,并执行与此应用程序相关(和无关)的其他内容。

我无法修改此批次。

说清楚: 程序A启动启动应用程序B

的批处理文件C

当我直接从windows运行批处理文件B时,java应用程序C几乎不会占用超过2%的CPU。但是当我通过我的java程序A运行它时,C消耗了25%的CPU负载(1个完整核心)。 在这两种情况下,CPU上的批处理执行费用都是~0%。

我想这是由于java应用程序的输出和错误流未正确处理。

我是对的吗?我怎么能解决这个问题?有没有办法让子子(进程的子进程)进程流?

0 个答案:

没有答案