docs: public void start() {
      if (isActive) {
        return;
      }
  
      log.info("Starting up the default async job executor [{}].", getClass().getName());
      
      if (timerJobRunnable == null) {
        timerJobRunnable = new AcquireTimerJobsRunnable(this, processEngineConfiguration.getJobManager());
      }
      
      if (resetExpiredJobsRunnable == null) {
        resetExpiredJobsRunnable = new ResetExpiredJobsRunnable(this);
      }
      
      if (!isMessageQueueMode && asyncJobsDueRunnable == null) {
        asyncJobsDueRunnable = new AcquireAsyncJobsDueRunnable(this);
      }
      
      if (!isMessageQueueMode) {
        initAsyncJobExecutionThreadPool();
        startJobAcquisitionThread();
      }
      
      startTimerAcquisitionThread();
      startResetExpiredJobsThread();
  
      isActive = true;
  
      executeTemporaryJobs();
    }