code: @Override
      protected void afterExecute(final Runnable r, final Throwable t) {
          super.afterExecute(r, t);
  
          synchronized (this.pending) {
              this.pending.remove(r);
          }
  
          Throwable rootCause = null;
          if (t == null && r instanceof Future<?>) {
              try {
                  final Object result = ((Future<?>) r).get();
                  if (result != null) {
                      LOGGER.log(FUTURE_DONE, r.hashCode(), result.toString());
                  }
              } catch (final CancellationException | ExecutionException e) {
                  rootCause = e.getCause();
              } catch (final InterruptedException ie) {
                  Thread.currentThread().interrupt(); // ignore/reset
              }
          }
          if (t != null) {
              LOGGER.log(JTP_ERROR, t);
          }
          if (rootCause != null) {
              LOGGER.log(JTP_ERROR_EXPLANATION, rootCause);
          }
      }
docs: {@inheritDoc}