docs: @Override
      public void close() {
          try {
              // Prevent new tasks being submitted
              shutdown();
          } catch (final SecurityException e) {
              // Ignore for now (caught again if shutdownNow() fails)
          }
          boolean terminated = false;
          try {
              // Await termination of any running tasks
              terminated = awaitTermination(2500, TimeUnit.MILLISECONDS);
          } catch (final InterruptedException e) {
              interruptionChecker.interrupt();
          }
          if (!terminated) {
              try {
                  // Interrupt all the threads to terminate them, if awaitTermination() timed out
                  shutdownNow();
              } catch (final SecurityException e) {
                  throw ClassGraphException.newClassGraphException("Could not shut down ExecutorService -- need "
                          + "java.lang.RuntimePermission(\"modifyThread\"), "
                          + "or the security manager's checkAccess method denies access", e);
              }
          }
      }