【发布时间】:2016-11-29 11:16:49
【问题描述】:
我有一个 Java 程序(包括其他东西)使用输入流从外部 Python 应用程序读取。
这是我用来阅读它的代码:
InputStreamReader isr = new InputStreamReader(p.getInputStream()),
isrError = new InputStreamReader(p.getErrorStream());
BufferedReader br = new BufferedReader(isr), brError = new BufferedReader(isrError);
new Thread() {
@Override
public void run() {
try {
while (brError.readLine() != null);
} catch (Exception e) {
}
}
}.start();
while ((line = br.readLine()) != null) { //line is a previously declared String
//do whatever with line
}
我也创建线程来读取错误流,因为 Python 应用程序在出现问题时会抛出错误(我无法编辑它,它是第三方软件),并且由于某种原因,如果我最终输入流被阻塞不要阅读 ErrorStream。
有什么方法可以让while (brError.readLine() != null); 对性能的影响更小?
现在我正在研究 VisualVM 的性能,虽然 Java 软件的 CPU 使用率通常保持在 0-5% 之间,这非常好,但是这个循环使用了大约 60-65% 的使用率线程,它的唯一功能是防止主循环阻塞。而且我需要尽可能提高性能(这是进入工业线,所以正确使用资源非常重要)。
谢谢大家。
【问题讨论】:
标签: java python performance process inputstream