什么是线程安全的ByteArrayOutputStream?

时间:2012-10-31 21:42:47

标签: java groovy

我想从进程的输出和错误流中读取并将它们合并到一个文本流中。我的程序是groovy,读起来像这样:

def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)

问题是ByteArrayOutputStream不是线程安全的,而waitForProcessOutput()会生成两个附加到mergeStream的线程。我可以使用线程安全的变体吗?你怎么建议我控制对mergeStream的访问?看起来在实践中,有时会使用此实现删除字符。

1 个答案:

答案 0 :(得分:7)

如果process.waitForProcessOutput()OutputStream作为参数,您可以简单地使用OutputStream的自定义实现,其所有方法都已同步,并委托给包装{的相应方法{1}}。就像ByteArrayOutputStream将另一个List包装到同步的List代理中一样。

编辑:

也就是说,读取ByteArrayOutputStream的源代码,其所有方法已经同步,因此它已经是线程安全的。您的错误可能来自其他地方。