In Java möchte ich mehrere Threads ausführen und die Antwort von allen von ihnen erhalten.Bei der Verwendung der ExecutorService.invokeAll gibt es eine Möglichkeit, alle Antworten zu erhalten, auch wenn eine Ausnahme aufgetreten ist
Das Problem, das ich habe, ist, wenn einer der threads löst eine Ausnahme, wenn ich die Zeichenfolge temp = r.get() fällt in den Fang und gibt mir nicht die Antwort von den verbleibenden Threads.
Gibt es eine Möglichkeit, alle Antworten zu verarbeiten, unabhängig davon, ob der einzelne Thread eine Ausnahme ausgelöst hat?
Mein Testcode ist
ExecutorService es = Executors.newFixedThreadPool(2);
List<CallTest> callList = new ArrayList<>();
callList.add(new CallTest(1));
callList.add(new CallTest(2));
callList.add(new CallTest(3));
callList.add(new CallTest(4));
try {
List<Future<String>> returns = es.invokeAll(callList);
for (Future<String> r : returns) {
String temp = r.get();
System.out.println("returned " + temp);
}
} catch (InterruptedException e) {
System.out.println("Interrupted Exception catch");
e.printStackTrace();
} catch (ExecutionException e) {
System.out.println("Execution Exception catch");
e.printStackTrace();
}
Setzen Sie den Try-Catch um die einzelnen 'r.get()' statt der gesamten Schleife? – RealSkeptic