код У меня возникли проблемы с является:Java Multi-Thread Палач InvokeAll Проблемы
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());
Метод invokeAll (List>) не определено для типа Исполнителю
Я сказал, что я должен использовать исполнителя, как тот, что в фрагменте кода.
В вызываемых объектов определяются в следующем коде:
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);
Возможно, мне не хватает чего-то элементарного и очевидного, но как вы можете отнести список вызываемых материалов для исполнителя? Разве вы не создали бы свою ExecutorService и не передали бы этот список? –
Я не уверен в себе. Я всего лишь студент, и я пытаюсь понять пример учителя. –
Ваш код выглядит очень неправильно для меня. Какая часть - код учителя, и какая часть принадлежит вам? Вы знаете, как работают исполнители? –