我能否使用一个PipedOutputStream为多线程服务并将其连接到一个PipedInputStream,然后从多个线程中获取所有的输出?
以下是代码片段,我的目标是修改和删除线程的输出可用于同步线程,但删除线程的输出被遗漏了。请在最后列出P4Thread的run()方法。
PipedInputStream input = new PipedInputStream();
PipedOutputStream output = new PipedOutputStream();
input.connect(output);
P4Thread syncthread = new P4Thread (new String[]{p4exe, "-x-", "sync", "-f"},input, out);
P4Thread modifythread = new P4Thread (new String[]{p4exe, "diff", "-se"},new ClosedInputStream(), output);
P4Thread deletethread = new P4Thread (new String[]{p4exe, "diff", "-sd"},new ClosedInputStream(), output);
try {
syncthread.start();
modifythread.run();
output.flush();
deletethread.run();
output.flush();
output.close();
syncthread .join();
} catch (InterruptedException e) {
syncthread .interrupt();
}
public void run() {
Launcher.ProcStarter ps = new Launcher.LocalLauncher(listener).launch();
ps.envs(env).stdin(input).stdout(output).cmds(cmdList);
if (workDir != null) {
ps.pwd(workDir);
}
try{
ps.join();
}catch (InterruptedException e) {
if (output != null && closePipes) {
IOUtils.closeQuietly(output);
}
//return -1;
} catch (IOException e) {
if (output != null && closePipes) {
IOUtils.closeQuietly(output);
}
} finally {
if (closePipes) {
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(output);
}
}
}
modifythread.start();
后面立即跟着modifythread.join();
。这与modifythread.run()
完全等效,只是浪费了一个线程。对于deletethread
也是一样的,.start()/join()
。 - user207421modifythread.run()
然后deletethread.run()
来获得顺序执行。你让这个问题变得比实际上更复杂了。 - user207421