关于Runtime.getRuntime().exec()产生阻塞的2个陷阱
时间: 2023-12-15 08:21:43 浏览: 75
程序代码实现的陷阱
当使用`Runtime.getRuntime().exec()`方法时,可能会遇到两个阻塞的陷阱:
1. 子进程的输出缓冲区已满。如果子进程的输出量很大,而你没有及时读取该输出,那么子进程的输出缓冲区会被填满,从而导致子进程阻塞。为了解决这个问题,你可以使用`Process.getInputStream()`方法获取子进程的输出流,并在另一个线程中读取该流。这样可以避免子进程阻塞。
2. 子进程在等待输入。如果子进程需要从标准输入流中读取数据,但是你没有及时向该流中写入数据,那么子进程就会一直阻塞。为了避免这种情况,你可以使用`Process.getOutputStream()`方法获取子进程的输入流,并在另一个线程中向该流中写入数据。
需要注意的是,在使用`Runtime.getRuntime().exec()`方法时,你应该尽可能使用重载方法,并且在其中指定命令、环境变量、工作目录等参数,以避免出现意外行为。同时,你应该尽可能使用`ProcessBuilder`类来创建子进程,因为它提供了更加灵活的控制机制。
阅读全文