code: public final ThreadProperties threadProperties() {
          ThreadProperties threadProperties = this.threadProperties;
          if (threadProperties == null) {
              Thread thread = this.thread;
              if (thread == null) {
                  assert !inEventLoop();
                  submit(NOOP_TASK).syncUninterruptibly();
                  thread = this.thread;
                  assert thread != null;
              }
  
              threadProperties = new DefaultThreadProperties(thread);
              if (!PROPERTIES_UPDATER.compareAndSet(this, null, threadProperties)) {
                  threadProperties = this.threadProperties;
              }
          }
  
          return threadProperties;
      }
docs: Returns the {@link ThreadProperties} of the {@link Thread} that powers the {@link SingleThreadEventExecutor}.
  If the {@link SingleThreadEventExecutor} is not started yet, this operation will start it and block until
  it is fully started.