docs: public boolean restart(final Long channelId, boolean needTermin) {
          boolean result = !needTermin;
          boolean status = false;
          if (status(channelId).isStop() == false) { // stop的优先级高于pause
              updateStatus(channelId, ChannelStatus.PAUSE);
              status = true;
          }
  
          if (needTermin) {
              try {
                  result |= termin(channelId, TerminType.RESTART);
              } catch (Throwable e) {
                  updateStatus(channelId, ChannelStatus.PAUSE); // 出错了，直接挂起
                  throw new ArbitrateException(e);
              }
  
          }
  
          // 处理一下重启操作，只处理pause状态
          if (status || result) {
              // 异步启动
              arbitrateExecutor.submit(new Runnable() {
  
                  public void run() {
                      // sleep一段时间，保证rollback信息有足够的时间能被处理完成
                      try {
                          Thread.sleep(5000L + RandomUtils.nextInt(2000));
                      } catch (InterruptedException e) {
                          // ignore
                      }
  
                      Channel channel = ArbitrateConfigUtils.getChannelByChannelId(channelId);
                      ChannelStatus status = status(channel.getId());
                      if (status.isStop()) {
                          // stop优先级最高，不允许自动重启
                          logger.info("channel[{}] is already stop , restart is ignored", channel.getId());
                      } else if (canStart(channel)) { // 出现stop，就不允许进行自动重启，stop优先级最高
                          start(channelId);
                      }
                  }
              });
          }
  
          return result && status;
      }