CompletableFuture - Neethahiremath/Wiki GitHub Wiki
refer https://www.callicoder.com/java-8-completablefuture-tutorial/
ex for runAsync
ExecutorService executorService = Executors.newWorkStealingPool(130);
Set<String> values = Stream.of("12","13","14").collect(Collectors.toSet());
Set<String> eachVal = Stream.of("1","2","3").collect(Collectors.toSet());
List<java.util.concurrent.CompletableFuture<Void>> taskList = new ArrayList<>();
values.forEach(
val -> {
java.util.concurrent.CompletableFuture<Void> submittedTask =
java.util.concurrent.CompletableFuture.runAsync(
() -> {
eachVal.forEach(in->{
System.out.print(in +" "+ val);
});
},
executorService)
.exceptionally(
(ex) -> {
log.error(
"Error while processing the processEventFromFlag for node {}",
val,
ex);
return null;
});
taskList.add(submittedTask);
});
java.util.concurrent.CompletableFuture.allOf(taskList.toArray(new java.util.concurrent.CompletableFuture[taskList.size()])).join();
bean of executorService can also be created
@Bean
public ExecutorService executorService() {
executorService = Executors.newWorkStealingPool(130);
return executorService;
}
ex for supplyAsync
Set<String> values = Stream.of("12", "13", "14").collect(Collectors.toSet());
Set<String> eachVal = Stream.of("1", "2", "3").collect(Collectors.toSet());
List<java.util.concurrent.CompletableFuture<Object>> taskList = new ArrayList<>();
values.forEach(
val -> {
java.util.concurrent.CompletableFuture<Object> submittedTask =
java.util.concurrent.CompletableFuture.supplyAsync(
() -> {
eachVal.forEach(
in -> {
System.out.print(in + " " + val);
});
return Boolean.TRUE;
},
executorService)
.handle(
(res, ex) -> {
if (ex != null) {
log.error("");
ex.printStackTrace();
return "Unknown!";
}
return res;
});
taskList.add(submittedTask);
});
// Awaiting future completion
java.util.concurrent.CompletableFuture.allOf(
taskList.toArray(new java.util.concurrent.CompletableFuture[taskList.size()]))
.join();
supplyAsync returns a value and runAsync does not