code: private void openSelector(ThreadNameDeterminer determiner) {
          try {
              selector = SelectorUtil.open();
          } catch (Throwable t) {
              throw new ChannelException("Failed to create a selector.", t);
          }
  
          // Start the worker thread with the new Selector.
          boolean success = false;
          try {
              DeadLockProofWorker.start(executor, newThreadRenamingRunnable(id, determiner));
              success = true;
          } finally {
              if (!success) {
                  // Release the Selector if the execution fails.
                  try {
                      selector.close();
                  } catch (Throwable t) {
                      logger.warn("Failed to close a selector.", t);
                  }
                  selector = null;
                  // The method will return to the caller at this point.
              }
          }
          assert selector != null && selector.isOpen();
      }
docs: Start the {@link AbstractNioWorker} and return the {@link Selector} that will be used for
  the {@link AbstractNioChannel}'s when they get registered