解决JAVA Process死锁
Posted guofx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决JAVA Process死锁相关的知识,希望对你有一定的参考价值。
主进程调用Process.waitfor后已挂起。当前子进程和主进程之间的缓冲区塞满后,子进程不能继续写数据,然后也会挂起。
需要获取Process.getInputStream和Process.getErrorStream并处理。
// 处理子进程输出的线程,防止死锁 static class StreamHandler extends Thread private InputStream in; public StreamHandler(InputStream in) this.in = in; public void run() try BufferedReader reader = new BufferedReader( new InputStreamReader(in)); String line = null; while ((line = reader.readLine()) != null) System.out.println(line); catch (Exception e) System.out.println(e.getMessage()); ProcessBuilder pb = new ProcessBuilder(); // 添加命令 pb.command(cmd); // 重定向错误输出,将错误输出合并到inputStream pb.redirectErrorStream(true); // 启动子进程 Process p = pb.start(); // 启动协助进程的子线程,将Process的inputStream输出,防止死锁 new StreamHandler(p.getInputStream()).start(); // 开始执行 int w = p.waitFor(); p.destroy();
以上是关于解决JAVA Process死锁的主要内容,如果未能解决你的问题,请参考以下文章