如何使用子进程修复竞争条件?

时间:2015-07-24 21:49:12

标签: java io inputstream multiprocess

我有一个创建另一个流程的流程。第一个过程等待第二个过程打印"完成"然后继续但是,我遇到的竞争条件是第一个进程有时会卡住,并且在第二个进程打印后无法继续。我的代码是:

第一个流程(使用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);
}

有时这会有效,但有时候第一个进程将无法获取输入流,程序将挂起。有什么问题?

1 个答案:

答案 0 :(得分:0)

我看到两个选项:

  1. 在print语句前放置一个Thread.sleep(1000),以保证您对InputStream进行了较长时间的轮询。
  2. 让子进程写入文件(使用ProcessBuilder.redirectOutput(File),然后在文件上调用.readLine(),这样可以保证你不会迟到。我可能会在调用{{{{}}之前删除临时文件1}}。
  3. 此外,我可能不会出于任何原因致电ProcessBuilder.start()