使用 的最佳实践是什么.stream().parallel()?
例如,如果您有一堆阻塞 I/O 调用并且您想检查 if .anyMatch(...),那么并行执行此操作似乎是明智之举。
示例代码:
public boolean hasAnyRecentReference(JobId jobid) {
<...>
return pendingJobReferences.stream()
.parallel()
.anyMatch(pendingRef -> {
JobReference readReference = pendingRef.sync();
Duration referenceAge = timeService.timeSince(readReference.creationTime());
return referenceAge.lessThan(maxReferenceAge)
});
}
Run Code Online (Sandbox Code Playgroud)
乍一看这看起来很合理,因为我们可以同时执行多个阻塞读取,因为我们只关心匹配的任何一个,而不是一个接一个地检查(所以如果每次读取需要 50 毫秒,我们只需要等待 ( 50ms * expectedNumberOfNonRecentRefs ) / numThreads)。
在生产环境中引入此代码是否会对代码库的其他部分产生任何不可预见的性能影响?
java parallel-processing concurrency forkjoinpool java-stream