why runAsync method in CompletableFuture is not executing until unless we are calling get method on CompletableFuture? [duplicate]
So ideally when we are using threading concept, it will run the task asynchronously, So in the below snippet:
CompletableFuture result= CompletableFuture.runAsync(()->{
System.out.println("1st Task Completed");
});
While running this code in main method it is not printing "1st Task Completed" . if I will put result.get() then it's printing "1st Task Completed". So is the task is is executing whenever we are calling get method ?
If that's the only code in your main
, the main
method will most likely return (and end your program) before the async task has had a chance to run.
Just add a Thread.sleep(1000);
or something like that after your code and you should see the expected output.
But we don't really know how long we need to wait, so a more robust approach would be to use a synchronization mechanism, for example:
CountDownLatch done = new CountDownLatch(1);
CompletableFuture.runAsync(()->{
System.out.println("1st Task Completed");
done.countDown();
});
done.await();