There are two approaches to submitting and polling task for result
FutureTask futureTask = new FutureTask(callable);
FutureTask class contains an additional " done()" method so we can override the done() method, then add the FutureTask object to the ExecutorService, so the done() method will invoke when the FutureTask completed immediately.
FutureTask
done()
ExecutorService