code: void runCheckAsync(final EvaluatorManager manager) {
  
      final String evaluatorId = manager.getId();
      LOG.log(Level.FINEST, "Idle check for Evaluator: {0}", manager);
  
      this.executor.submit(new Runnable() {
  
        @Override
        public void run() {
  
          LOG.log(Level.FINEST, "Idle check for Evaluator {0} - begin", evaluatorId);
  
          while (!manager.isClosed()) {
            try {
  
              LOG.log(Level.FINEST,
                  "Waiting for Evaluator {0} to close: Sleep for {1} ms",
                  new Object[] {evaluatorId, waitInMillis});
  
              Thread.sleep(waitInMillis);
  
            } catch (final InterruptedException e) {
              LOG.log(Level.SEVERE, "Thread interrupted while waiting for Evaluator to finish.");
              throw new RuntimeException(e);
            }
          }
  
          manager.checkIdlenessSource();
  
          LOG.log(Level.FINEST, "Idle check for Evaluator {0} - end", evaluatorId);
        }
  
        @Override
        public String toString() {
          return "CheckIdle: " + evaluatorId;
        }
      });
    }
docs: Runs a check in the ThreadPool for the {@link EvaluatorManager} to wait for it to finish its
  Event Handling and check its idleness source.
  @param manager the {@link EvaluatorManager}