Ich habe ein Programm, in dem ich Dateien von S3 mit einem Callable-Objekt herunterladen, die an einen ExecutorService übergeben. Die Dateien sind groß und es dauert einige Minuten, bis sie vollständig heruntergeladen sind. Ist es sinnvoll, eine andere Callable-Klasse zu erstellen, die die Zukunft vom Downloader übernimmt und sie zur Fertigstellung betrachtet? Mein Endziel ist es, alle vollständigen Downloads zu einer zentralen Liste innerhalb eines Caches hinzuzufügen.Zukünftige <T> Objekte für die Fertigstellung mit ExecutorService
Zum Beispiel:
public void add(final String s3urlToDownload){
Future<S3Object> futureS3obj = cachedPoolExecutor.submit(new S3Downloader(s3urlToDownload));
// Instead of calling futureS3obj.get() and waiting, submit the Future to the "Watcher" service.
// Within FutureWatcher, the S3Object will be added to the List once the download is complete.
cachedPoolExecutor.submit(new FutureWatcher(downloadedList, futureS3obj))
}
Was ist der Vorteil eines zusätzlichen 'Callable', wenn Sie bereits eine' Zukunft' haben? – Kayaman
@Kayaman, Zu meinem Verständnis, wenn ich die '' '()' '' Methode der Zukunft nannte, würde die 'add' Methode blockieren. Deshalb melde ich einen neuen Callable 'FutureWatcher' – dmux
Also was bringt das' Callable' ins Spiel? Der Aufruf der 'call()' Methode würde ebenfalls blockieren, da es auf 'get()' delegiert wird. – Kayaman