Last Updated: June 6, 2026
Runnable runs a task on a thread but can't hand a result back, and it can't throw a checked exception. Callable<V> fixes both, and Future<V> is the handle you use to retrieve the result later, cancel the task, or check whether it has finished. This lesson covers how Callable differs from Runnable, how to submit one to an ExecutorService, how to pull results out of a Future, how invokeAll and invokeAny work, how cancellation actually behaves, and where FutureTask fits in as the thing that powers both sides.