マルチスレッドに 1 つの pipedoutputstream を使用し、それを 1 つの 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);
}
}
}