我有这个代码:
ArrayList<Detector> detectors;
detectors.stream().anyMatch(d -> d.detectRead(impendingInstruction, fieldName));
Run Code Online (Sandbox Code Playgroud)
但我还要保证:
true,评估立即停止这总是如此,或者如果不是,至少对于所有常见的JDK实现是否都是如此?
您的问题意味着关注流操作的副作用,否则您不会关心订单或立即终止.来自Javadoc:
副作用
通常,不鼓励行为参数对流操作的副作用,因为它们通常会导致无意中违反无国籍要求以及其他线程安全危险.
如果行为参数确实有副作用,除非明确说明,否则不能保证这些副作用对其他线程的可见性,也不保证同一流管道中"相同"元素的不同操作在同一个线程中执行.此外,这些效果的排序可能令人惊讶.即使当管道被约束以产生结果,其与流源的遭遇顺序一致(例如,IntStream.range(0,5).parallel()地图(X - > X*2).toArray( )必须产生[0,2,4,6,8]),不保证映射器函数应用于单个元素的顺序,或者对给定元素执行任何行为参数的线程.
所以合同似乎是你可以侥幸逃脱,但它不能保证工作.
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |