To run some stuff in parallel or asynchronously I can use either an ExecutorService: Future submit(Runnable task, T result); or the CompletableFu
Future submit(Runnable task, T result);
This clarified for me the difference between future an completable future a bit more: Difference between Future and Promise
CompletableFuture is more like a promise.