我可以将一个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);
}
}
}
答案 0 :(得分:1)
是的,只要您负责同步多线程写入,这样它们就不会交错。