What is `CompletableFuture` in Java?
`CompletableFuture` is a class that allows you to run tasks asynchronously, but it always blocks the calling thread until the result is available.
Thatâ€™s incorrect. `CompletableFuture` doesn't block the calling thread unless you explicitly call `get()` or `join()`. Otherwise, it allows non-blocking execution.
Can you explain the non-blocking nature of `CompletableFuture` methods like `thenApply()`?