首页 > 解决方案 > java流中的阻塞

问题描述

有没有办法制作一个 Stream 块并等待数据源中的数据准备好,然后当我知道没有其他需要等待时关闭它?我已经尝试使数据源成为阻塞数据源,BlockingQueue但它并没有明显工作,因为我正在使用forEeach不使用takepeek阻塞的函数在流上循环。

标签: javajava-stream

解决方案


流被设计Spliterator为其元素的最终来源。您可以实现该tryAdvance()方法来测试是否存在另一个元素,并阻塞直到知道结果。

您提到了 a BlockingQueue,它在并发处理中很有用。如果您在某些线程中“生产”元素,并试图在其他线程中“使用”它们,您可能会发现 aCompletionService比 custom 更适合您的应用程序Stream

Spliterator就其操作而言,它是一个相当简单的接口,但正确实现它需要对拆分器“特性”有很好的理解。我认为这是一个高级主题,虽然在某些情况下自定义实现很有用,但它也可能是一个警告信号,表明您正在寻找错误的方法——您不必Stream对所有事情都使用。

Stream(从 aSpliterator中创建 a StreamSupport.stream()。)


推荐阅读