java调用命令行Runtime.getRuntime().exec()阻塞问题

来源:互联网 发布:专业 有限元分析软件 编辑:程序博客网 时间:2024/05/17 02:36

先上代码

[java] view plaincopyprint?
  1. Process process = Runtime.getRuntime().exec(cmds);  
  2. InputStream in = process.getInputStream();  
  3. StringBuilder sBuilder = new StringBuilder();  
  4. int a;  
  5. while ((a = in.read()) != -1) {  
  6.     sBuilder.append((char) a);  
  7. }  

执行上面的代码的时候,如果cmds里的命令在后台打印出许多内容的话,process的 inputstream和errorstream的缓冲区会被填满,这个时候如果你不吧内容读出来的话就会阻塞在那里,而执行的进程因为内容打印不出来也会阻塞在那里不动。

 

所以这种情况最好是开两个单独的线程去分别读inputstream和errorstream的内容。

0 0