我有一个创建另一个流程的流程。第一个过程等待第二个过程打印"完成"然后继续但是,我遇到的竞争条件是第一个进程有时会卡住,并且在第二个进程打印后无法继续。我的代码是:
第一个流程(使用ProcessBuilder创建流程):
if((new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()).contains("Process done"))
{
}
System.out.println("Second process completed.");
process.destroy();
第二个过程:
public static void main(String[] args)
{
/*does some action*/
System.out.println("Process done");
Thread.sleep(Integer.MAX_VALUE);
}
有时这会有效,但有时候第一个进程将无法获取输入流,程序将挂起。有什么问题?
答案 0 :(得分:0)
我看到两个选项:
Thread.sleep(1000)
,以保证您对InputStream进行了较长时间的轮询。ProcessBuilder.redirectOutput(File)
,然后在文件上调用.readLine()
,这样可以保证你不会迟到。我可能会在调用{{{{}}之前删除临时文件1}}。此外,我可能不会出于任何原因致电ProcessBuilder.start()
。