docs: @Override
      public synchronized void destroy() {
          if (JobChangeLog.isEnabled()) {
              JobChangeLog.log("#job ...Destroying scheduler completely: jobs={} scheduler={}", jobKeyJobMap.size(), cron4jScheduler);
          }
          // not use AsyncManager here, because not frequent call, keep no dependency to core
          new Thread(() -> { // to release synchronized lock to avoid deadlock
              try {
                  cron4jScheduler.stop();
              } catch (RuntimeException e) {
                  final String msg = "#job Failed to stop jobs: jobs={} scheduler={}";
                  if (JobChangeLog.isEnabled()) {
                      JobChangeLog.log(msg, jobKeyJobMap.size(), cron4jScheduler, e);
                  } else { // just in case
                      logger.info(msg, jobKeyJobMap.size(), cron4jScheduler, e);
                  }
              }
              Cron4jJobHistory.clear();
          }).start();
      }