/**
   * ************* 添加指定回合的本时间节点的任务,返回是否添加成功,不成功则表示需要马上执行
   *
   * @author alzq.z
   * @time Jul 16, 2015 11:26:06 PM
   */
  public boolean addTimingTask(int _round, _IALSynTask _task) {
    _lock();

    try {
      if (null == _task) return false;

      // 当本回合的时候,直接进行添加
      if (_round == _m_iCurRound) {
        _m_lCurRoundTimingTaskList.add(_task);
        return true;
      } else if (_round == _m_iNextRound) {
        _m_lNextRoundTimingTaskList.add(_task);
        return true;
      } else if (_round > _m_iNextRound) {
        // 长时间延迟的任务,按照回合顺序放入对应队列
        ListIterator<ALSynTimingTaskNodeFarDelayTaskInfo> iterator =
            _m_lFarDelayTaskList.listIterator();
        while (iterator.hasNext()) {
          ALSynTimingTaskNodeFarDelayTaskInfo taskInfo = iterator.next();
          if (taskInfo.getRound() == _round) {
            // 匹配回合则加入本节点
            taskInfo.addSynTask(_task);
            break;
          } else if (taskInfo.getRound() < _round) {
            // 当插入的回合比对应回合早,则需要在对应回合之前插入数据
            // 这里采用的做法是将本节点数据重复插入到下一个节点,之后将本节点设置为新数据
            iterator.add(taskInfo);

            // 创建新节点
            ALSynTimingTaskNodeFarDelayTaskInfo newInfo =
                new ALSynTimingTaskNodeFarDelayTaskInfo(_round);
            iterator.set(newInfo);
            // 插入任务
            newInfo.addSynTask(_task);
            break;
          }
        }

        // 判断是否已经到了最后节点
        if (!iterator.hasNext()) {
          // 在最后节点则往最后追加数据
          // 创建新节点
          ALSynTimingTaskNodeFarDelayTaskInfo newInfo =
              new ALSynTimingTaskNodeFarDelayTaskInfo(_round);
          iterator.add(newInfo);
          // 插入任务
          newInfo.addSynTask(_task);
        }

        return true;
      } else {
        // 当回合小于当前回合则表示失败,外部需要直接处理
        return false;
      }
    } finally {
      _unlock();
    }
  }
  /**
   * ************* 向下移动一个回合
   *
   * @author alzq.z
   * @time Jul 16, 2015 11:58:23 PM
   */
  protected void _moveNextRound() {
    // 累加一个回合
    _m_iCurRound++;
    _m_iNextRound++;

    // 将下一回合任务累加到当前队列
    while (!_m_lNextRoundTimingTaskList.isEmpty()) {
      _m_lCurRoundTimingTaskList.addLast(_m_lNextRoundTimingTaskList.pop());
    }

    // 获取第一个长时间间隔任务队列节点,是否匹配下一回合,是则将任务放入
    if (!_m_lFarDelayTaskList.isEmpty()) {
      ALSynTimingTaskNodeFarDelayTaskInfo farDelayInfo = _m_lFarDelayTaskList.getFirst();
      if (farDelayInfo.getRound() == _m_iNextRound) {
        // 从长时间间隔队列删除
        _m_lFarDelayTaskList.pop();
        // 将任务放入
        farDelayInfo.popAllSynTask(_m_lNextRoundTimingTaskList);
      }
    }
  }