FutureTask

This class is both a Runnable and a Future. It correctly propagates thread interruption, unlike CompletableFuture.

However, the run() method does not throw. If two FutureTasks are chained together the inner will not ever throw an exception.