code: public boolean isActive() {
          lock.readLock().lock();
          try {
              return !started || asynchronousExecution != null || isAlive();
          } finally {
              lock.readLock().unlock();
          }
      }
docs: Check if executor is ready to accept tasks.
  This method becomes the critical one since 1.536, which introduces the
  on-demand creation of executor threads. Callers should use
  this method instead of {@link #isAlive()}, which would be incorrect for
  non-started threads or running {@link AsynchronousExecution}.
  @return true if the executor is available for tasks (usually true)
  @since 1.536