docs: public void signal(String conditionId, int maxSignalCount, String objectName) {
          if (waiters == null) {
              return;
          }
  
          Set<WaitersInfo.ConditionWaiter> waiters;
          WaitersInfo condition = this.waiters.get(conditionId);
          if (condition == null) {
              return;
          } else {
              waiters = condition.getWaiters();
          }
          if (waiters == null) {
              return;
          }
          Iterator<WaitersInfo.ConditionWaiter> iterator = waiters.iterator();
          for (int i = 0; iterator.hasNext() && i < maxSignalCount; i++) {
              WaitersInfo.ConditionWaiter waiter = iterator.next();
              ConditionKey signalKey = new ConditionKey(objectName,
                      key, conditionId, waiter.getCaller(), waiter.getThreadId());
              registerSignalKey(signalKey);
              iterator.remove();
          }
          if (!condition.hasWaiter()) {
              this.waiters.remove(conditionId);
          }
  
      }