gpt4 book ai didi

Java多线程执行器InvokeAll问题

转载 作者:行者123 更新时间:2023-12-02 04:03:58 25 4
gpt4 key购买 nike

我遇到问题的代码是:

Executor executor = (Executor) callList;

List<ProgState> newProgList = executor.invokeAll(callList).stream()
.map(future -> {try {return future.get();} catch(Exception e){e.printStackTrace();}})
.filter(p -> p!=null).collect(Collectors.toList());

The method invokeAll(List>) is undefined for the type Executor

有人告诉我应该使用像代码片段中那样的执行器。

Callables 在以下代码中定义:

List<Callable<ProgState>> callList = (List<Callable<ProgState>>) lst.stream()
.map(p -> ((Callable<ProgState>)(() -> {return p.oneStep();})))
.collect(Collectors.toList());

这是老师的代码:

//prepare the list of callables

List<Callable<PrgState>> callList = prgList.stream().map(p -> (() -> {return p.oneStep();})).collect(Collectors.toList());

//start the execution of the callables
//it returns the list of new created threads

List<PrgState> newPrgList = executor.invokeAll(callList).stream()
.map(future -> { try {
return future.get();
}
catch(Exception e) {

//here you can treat the possible
// exceptions thrown by statements
// execution

}
})
.filter(p -> p!=null).collect(Collectors.toList());


//add the new created threads to the list of existing threads

prgList.addAll(newPrgList);

最佳答案

如果你可以使用stream(),为什么不使用parallelStream(),因为它会简单得多。

 List<PrgState> prgStates = prgList.parallelStream()
.map(p -> p.oneStep())
.collect(Collectors.toList());

这样,完成后就无需配置、启动或停止线程池。

有些人可能认为 parallelStream() 是向 Java 8 添加 Stream 和 lambda 的主要原因。 ;)

关于Java多线程执行器InvokeAll问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34564558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com