code: public final void dispose() {
          if (disposed) {
              return;
          }
  
          synchronized (disposalLock) {
              if (!disposing) {
                  disposing = true;
                  startupProcessor();
              }
          }
  
          disposalFuture.awaitUninterruptibly();
          disposed = true;
      }
docs: {@inheritDoc}