Method invoked upon completion of execution of the given Runnable.
This method is invoked by the thread that executed the task. If
non-null, the Throwable is the uncaught RuntimeException
or Error that caused execution to terminate abruptly.
Note: When actions are enclosed in tasks (such as
java.util.concurrent.FutureTask) either explicitly or via methods such as
submit, these task objects catch and maintain
computational exceptions, and so they do not cause abrupt
termination, and the internal exceptions are not
passed to this method.
This implementation does nothing, but may be customized in
subclasses. Note: To properly nest multiple overridings, subclasses
should generally invoke super.afterExecute at the
beginning of this method.