Runtime.getRuntime().exec() 执行perl下载数据文件,被阻塞。原因是只处理了“标准输出流”。
解决方案:另起一个线程处理遍历读取“错误出输出流”,此处需要注意:根据阿里规约,所有的线程不能显示声明,需要使用线程池,就算是只有一个线程。
解决方案的实施代码工具类:
public static int runSystemCmd(String cmd) {
StringBuffer resultStringBuffer = new StringBuffer();
String lineToRead;
int exitValue;
try {
Process proc = Runtime.getRuntime().exec(cmd);
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(()-> {
try (InputStream errorStream = proc.getErrorStream();
BufferedReader bufferedErrReader = new BufferedReader(new InputStreamReader(errorStream))){
String line;
while ((line = bufferedErrReader.readLine()) != null) {
log.info(line+"\r\n");
}