В настоящее время я использую приведенный ниже код для запуска процесса и вывода его результатов из моей собственной программы. Моя проблема в том, что я хотел бы сделать больше, чем просто распечатать вывод. Однако, поскольку выполняемый Процесс едва печатает вывод на консоль, закомментированная строка почти никогда не выполняется, потому что метод readLine () блокирует.
Process p = Runtime.getRuntime().exec(executablePath);
ProcessWatcher pw = new ProcessWatcher(p);
BufferedReader output = new BufferedReader(new InputStreamReader(p.getInputStream()));
while(!pw.isFinished()) {
String line = output.readLine();
if(line != null) {
System.out.println(line);
}
// I want to do something in parallel here
}
Моя проблема была бы решена, если бы я мог дать вызову readLine () какое-то время ожидания, или если бы я мог запустить его в своем собственном потоке. Последнее было бы предпочтительным, но первое приемлемо. Мое основное намерение - сделать код простым.
Есть ли хороший, простой способ распараллелить блокирующий вызов, или мне нужно будет создать новый класс, который реализует Runnable только для этого?