java - java流中的阻塞
问题描述
有没有办法制作一个 Stream 块并等待数据源中的数据准备好,然后当我知道没有其他需要等待时关闭它?我已经尝试使数据源成为阻塞数据源,BlockingQueue
但它并没有明显工作,因为我正在使用forEeach
不使用take
或peek
阻塞的函数在流上循环。
解决方案
流被设计Spliterator
为其元素的最终来源。您可以实现该tryAdvance()
方法来测试是否存在另一个元素,并阻塞直到知道结果。
您提到了 a BlockingQueue
,它在并发处理中很有用。如果您在某些线程中“生产”元素,并试图在其他线程中“使用”它们,您可能会发现 aCompletionService
比 custom 更适合您的应用程序Stream
。
Spliterator
就其操作而言,它是一个相当简单的接口,但正确实现它需要对拆分器“特性”有很好的理解。我认为这是一个高级主题,虽然在某些情况下自定义实现很有用,但它也可能是一个警告信号,表明您正在寻找错误的方法——您不必Stream
对所有事情都使用。
Stream
(从 aSpliterator
中创建 a StreamSupport.stream()
。)
推荐阅读
- react-native - 反应原生对齐图标和文本
- asp.net - Asp.net web 方法 ajax 调用显示堆栈跟踪和实际异常,同时自定义错误模式
- javascript - HTML Anchor href 和 onclick 在 Firefox 中不起作用
- node.js - NodeJS Selenium-webdriver 自定义等待方法未返回所需结果
- java - Java Guice DI 错误:UnsatisfiedDependencyException:SystemInjecteeImpl 处没有可用于注入的对象
- r - 如果R中的同一行有重复值,如何删除行
- python - 没有得到如何解决“IndexError:索引 0 超出轴 0 大小为 0 的范围”
- android - 在 Android 中使用 gson 解析组合的 JSON 文件
- java - 简单日期格式设置为 01
- python - 将异构 numpy 数组转换为同质数组