Sto utilizzando CompletableFuture come mostrato di seguito nel codice. ma riguardo al modo in cui dovrei aspettare fino alla fine di tutti i runnables, ho trovato due modi e non conosco la differenza tra loro e quale è la migliore pratica? sono i seguenti:Qual è il modo consigliato di attendere il completamento dei thread futuri completabili
codice:
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);
primo approccio di aspettare fino a che tutti runnables finiscono
this.growSeedExecutor.shutdown();
this.growSeedExecutor.awaitTermination(1, TimeUnit.DAYS);
secondo approccio di aspettare fino a che tutti runnables finiscono
CompletableFuture.allOf(this.growSeedFutureList).join();
fatemelo sapere quale è raccomandato
Entrambi funzionerebbero quindi dipende da cosa si vuole fare con l'executor: se non ne hai più bisogno usa il primo - se vuoi riutilizzarlo usa quest'ultimo ... Anche nel tuo primo codice snippet tieni solo un riferimento all'ultimo CompletableFuture ... – assylias