runAsync takes Runnable as input parameter and returns CompletableFuture<Void>
, which means it does not return any result.
CompletableFuture<Void> run = CompletableFuture.runAsync(()-> System.out.println("hello"));
But suppyAsync takes Supplier as argument and returns the CompletableFuture<U>
with result value, which means it does not take any input parameters but it returns result as output.
CompletableFuture<String> supply = CompletableFuture.supplyAsync(() -> {
System.out.println("Hello");
return "result";
});
System.out.println(supply.get()); //result
Conclusion : So if you want the result to be returned, then choose supplyAsync
or if you just want to run an async action, then choose runAsync
.