Future
is a placeholder for a result of an operation that hasn't finished yet.
Once the operation finishes, the Future
will contain that result.
Limitations of futures:
- they cannot be manually completed
- no further action on a Future's result without blocking
- multiple Futures cannot be chained or combined
- there is no exception handling construct
CompletableFuture
was introduced to fix the limitations of Future
.
CompletableFuture
is a tool for asynchronous programming in Java. Asynchronous programming is writing
non-blocking code by running a task on a separate thread than the main application thread
and notifying the main thread about its progress, completion, or failure.
Callbacks can be attached to the CompletableFuture
using thenApply()
, thenAccept()
and thenRun()
methods.
The CompletableFuture.get()
method is blocking. It waits until the Future
is completed and returns
the result after its completion.
The runAsync(Runnable runnable)
returns a new CompletableFuture
that is asynchronously completed by
a task running in the ForkJoinPool.commonPool()
after it runs the given action.
(It execute tasks in a thread obtained from the global ForkJoinPool.commonPool()
)