Я использую CompletableFuture, как показано ниже в коде. но относительно того, как я должен ждать, пока все runnables не закончатся, я нашел два пути, и я не знаю разницы между ними, и какая из них лучшая практика? они следующим образом:Каков рекомендуемый способ подождать, пока закончится завершающая обработка будущих окон
код:
this.growSeedFutureList = CompletableFuture.runAsync(new GrowSeedSERun(this.saliencyMat, this.seedXY, this.seedVal), this.growSeedExecutor);
this.growSeedFutureList = CompletableFuture.runAsync(new GrowSeedNWRun(this.saliencyMat, this.seedXY, this.seedVal), this.growSeedExecutor);
this.growSeedFutureList = CompletableFuture.runAsync(new GrowSeedNERun(this.saliencyMat, this.seedXY, this.seedVal), this.growSeedExecutor);
this.growSeedFutureList = CompletableFuture.runAsync(new GrowSeedSWRun(this.saliencyMat, this.seedXY, this.seedVal), this.growSeedExecutor);
первый подход ждать, пока все runnables закончить
this.growSeedExecutor.shutdown();
this.growSeedExecutor.awaitTermination(1, TimeUnit.DAYS);
второй подход ждать, пока все runnables закончить
CompletableFuture.allOf(this.growSeedFutureList).join();
пожалуйста, дайте мне знать, какой из них рекомендуется
Оба будут работать, так что это зависит от того, что вы хотите сделать с исполнителем: если вам это больше не нужно, используйте первое - если вы хотите его повторно использовать, используйте последний ... Также в вашем первом коде snippet вы только сохраняете ссылку на последний CompletableFuture ... – assylias