防死锁的Java命令行函数

防死锁的Java命令行函数

现象:
        Runtime.exec() 方法创建标准的输出的管道。 当子进程,往完全缓冲区此管道写入大量数据时,它阻止在管道上直到管道缓冲区中的数据读取父进程。 如果父进程将永远不会读取标准输出, Process.waitFor() 不返回。
1、程序代码
      StringBuffer command = new StringBuffer();
      command .append("你需要的命令行");
      Runtime rt = Runtime.getRuntime();
      Process process=rt.exec(command.toString());
      int pflag = -1;
      //重要,解决死锁的方案
      new PrintStream(process.getInputStream()).start();
      pflag=process.waitFor();
      if(pflag!=-1){
       System.out.println("执行成功!");
     }
     类PrintStream,网上找的,主要是打印信息
    class PrintStream extends Thread{
     java.io.InputStream __is = null;
      public PrintStream(java.io.InputStream is)  {
        __is = is;
      }

     public void run() {
       try  {
       while(this != null) {
       int _ch = __is.read();
     if(_ch != -1)
      System.out.print((char)_ch);
     else break;
    }
   }
   catch (Exception e)
   {
    e.printStackTrace();
   }
  }
 }
2、解决方案
      若要避免阻止,请确保父进程始终读取标准输出从子进程。

你可能感兴趣的:(防死锁的Java命令行函数)