【发布时间】:2011-12-05 21:52:40
【问题描述】:
PipedInputStream 和PipedOutputStream 用于线程间数据传输。 “数据由一个线程从PipedInputStream 对象读取,数据由其他线程写入相应的PipedOutputStream”。
到目前为止,一切都很好。我从这个范例中看到的一个潜在好处是零星的生产者 (OutputStream) 不需要被缓慢的消费者 (InputStream) 减慢。换句话说,当OutputStream突然产生大量消费者无法立即消费的数据时,OutputStream不需要等待生产的数据被完全消费完再继续它的生命。
问题1:我的理解正确吗?这是这个 PipedStreams 构造的好处之一吗?
如果问题 1 的答案是肯定的,那么:
这在缓冲区未满时效果很好,但是当缓冲区已满时,在 JDK6 的实现中,PipedOutputStream 会阻塞并等待更多空间释放。这超出了我上面提到的目的,不是吗?
通过将缓冲区满的情况下的行为从等待新空间更改为分配更大的缓冲区,这个问题似乎很容易解决。我可能可以在几分钟内实现一个,但如果那里已经有类似的东西,我不想重新发明轮子。我用谷歌搜索了很多,但找不到任何东西,这让我很惊讶。
有人能指出我正确的方向吗?或者指出我的想法错在哪里?
谢谢
【问题讨论】:
标签: java multithreading io blocking