Ich habe 3 FutureTask<T>
Objekte. Ich möchte, dass sie asynchron verarbeitet werden. Sobald jedoch eine der get()
Methoden von FutureTasks null
nicht zurückgibt, möchte ich fortfahren, d. H. Meine Methode (Wrapper) kehrt zurück und wartet nicht, bis die anderen beiden FutureTasks verarbeitet wurden. Ich dachte an so etwas wie:Fortfahren, wenn eine zukünftige Aufgabe erwartet wird Ergebnis
private File wrapper(final File file) {
ExecutorService executors = Executors.newCachedThreadPool();
File returnFile;
FutureTask<File> normal= ...
FutureTask<File> medium=...
FutureTask<File> huge=...
executors.execute(normal);
executors.execute(medium);
executors.execute(huge);
try {
if((returnFile=normal.get()) != null ||
(returnFile=medium.get()) != null ||
(returnFile=huge.get()) != null)
return returnFile;
} catch(ExecutionException | InterruptedException e) { }
}
Ich bin nicht sicher, wie die Ausnahmen zu erfassen (von der get geworfen()) in einem richtigen Weg, weil ich davon ausgehen, werden sie, da ich ohne gerade geworfen werden zurückkehren zu warten Die anderen beiden Aufgaben müssen erledigt werden. Außerdem habe ich Zweifel, dass der Code wie geplant funktioniert. Ich fühle, dass ich der Lösung nahe bin, aber etwas vermisse.
Verwenden Sie Java 8? – John
derzeit java 7 – Brenne
dingy hier ist, dass Sie Ergebnis sofort für große Aufgabe verfügbar, aber Sie sind unnötig blockiert warten auf lange laufende Aufgabe normal. Wenn ich Ihre Anforderung richtig verstanden habe, reicht es aus, dass nur eine davon für die Verarbeitung abgeschlossen ist. – John