code: private final Future<Void> executeTask (final ITask task) throws TaskExecutionException {
  
          if (task instanceof IOTask) {
              final Future<Void> returnVal = executor.submit((IOTask) task);
              return returnVal;
          } else {
              try {
                  task.call();
              } catch (final Exception exc) {
                  throw new TaskExecutionException(new ExecutionException(exc));
              }
              return null;
          }
          // LOGGER.info("Added a " + task + " to the TaskQueue");
      }
docs: This methods appends the given task to the end of the taskQueue and set the calling thread is sleep state.
  
  @param task The task to append to the end of the taskQueue.
  @throws InterruptedException if another thread interrupted the current thread before or while the current thread
  was waiting for a notification. The interrupted status of the current thread is cleared when this
  exception is thrown.
  @throws ExecutionException if anything happens while execution