code: protected void release() {
          if (!releaseNeeded.get()) {
              return; // there is no point in releasing if we do not wait. Avoid excessive releasing.
          }
  
          releaseNeeded.set(false);// release is under way
          backgroundExecutor.execute(new Runnable() {
              @Override
              public void run() {
                  try {
                      List<Command> releaseCommandList = new ArrayList<Command>(Collections.singletonList(releaseCommand));
                      transmit(releaseCommandList);
                  } catch (DolphinRemotingException e) {
                      handleError(e);
                  }
              }
          });
      }
docs: Release the current push listener, which blocks the sending queue.
  Does nothing in case that the push listener is not active.