我可以将一个管道输出流用于多线程并将其连接到一个管道输入流,然后从多线程获取所有输出吗?
以下是代码片段,我想要的是修改和删除线程的输出可用于同步线程,但删除线程的输出丢失了。最后列出 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);
}
}
}