java - Process.waitFor() 一个线程

标签 java multithreading process processbuilder inputstreamreader

在运行外部脚本时,我想同时和单独读取该脚本的ErrorStream和OutputStream,然后进一步处理它们。因此,我为其中一个流启动一个Thread。不幸的是,进程似乎没有等待线程终止,而是在非线程流没有进一步输入后返回。

简而言之,这就是我正在做的事情:

ProcessBuilder pb = new ProcessBuilder(script);  
final Process p = pb.start();  

new Thread(new Runnable() {  
  public void run() {
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    ...read lines and process them...
  }
}).start();

BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
...read lines and process them...

int exitValue = p.waitFor();
p.getOutputStream().close();
return exitValue;

是否有可能waitForThread被终止?

最佳答案

您可以使用Thread.join(...)来等待Thread完成。请注意,如果当前线程在您等待的线程完成之前收到中断,则调用会抛出 InterruptedException

关于java - Process.waitFor() 一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15482492/

相关文章:

windows - WinAPI Shell API 与基本 API 和 CRT 函数有何不同?

java - 使AnimationDrawable向前移动

java - 如何使用java代码在eclipse的控制台中插入值

java - Android fragment 和空对象引用

linux - Pthread 互斥锁 Linux

java - 如何对我现有的 javafx 应用程序进行多线程处理

windows - 什么是工作集?

java - 蓝牙 COM 端口的 RXTX 问题

c++ - 使用 boost::thread 开始/停止记录数据(第二次更新)

python - 检查第二个脚本是否正在运行或已经完成