code: public void launchTask(TaskInProgress tip) throws IOException {
      LOG.info("Launching simulated task " + tip.getTask().getTaskID() +
          " for job " + tip.getTask().getJobID());
      TaskUmbilicalProtocol umbilicalProtocol = taskTracker.getUmbilical(tip);
      // For map tasks, we can just finish the task after some time. Same thing
      // with cleanup tasks, as we don't need to be waiting for mappers to finish
      if (tip.getTask().isMapTask() || tip.getTask().isTaskCleanupTask() ||
        tip.getTask().isJobCleanupTask() || tip.getTask().isJobSetupTask() ) {
        addTipToFinish(tip, umbilicalProtocol);
      } else {
        MapperWaitThread mwt =
            new MapperWaitThread(tip, this, umbilicalProtocol);
        // Save a reference to the mapper wait thread so that we can stop them if
        // the task gets killed
        mapperWaitThreadMap.put(tip, mwt);
        mwt.start();
      }
  
    }
docs: The primary public method that should be called to 'run' a task. Handles
  both map and reduce tasks and marks them as completed after the configured
  time interval
  @param tip