当给出ints时
List<Integer> ints = IntStream.range(0, 1000).boxed().collect(Collectors.toList());
通过java流api,我们可以减少它们
MyValue myvalue = ints
.parallelStream()
.map(x -> toMyValue(x))
.reduce((t, t2) -> t.combine(t2))
.get();
在这个例子中,什么对我来说是重要的
项目将在多个线程中减少
早期Map的项目将提前减少
不是所有的结果 toMyValue()
将同时加载
现在我想做同样的处理 CompletableFuture
应用程序编程接口。
做Map,我做了,
List<CompeletableFuture<MyValue>> myValueFutures = ints
.stream()
.map(x -> CompletableFuture.supplyAsync(() -> toMyValue(x), MY_THREAD_POOL))
.collect(Collectors.toList());
现在我不知道如何减少 List<CompeletableFuture<MyValue>> myValueFutures
单身 MyValue
.
并行流提供了方便的api,但由于这些问题,我不想使用流api。
并行流在处理过程中很难停止。
当某些工作进程被io阻塞时,并行流的活动工作进程计数可能会超过并行进程数。这有助于最大限度地提高cpu利用率,但可能会出现内存开销(甚至oom)。
有没有办法减少可竞争的未来?一个接一个带外流reduce api?
暂无答案!
目前还没有任何答案,快来回答吧!