@Override
	public ExecuteResult start() {
		String currentActionName = startActionName;
		Map<String, Action> actions = getActionMap();
		while (true) {
			// 如果没有提前预置标志结束的ActionName，则使用end。如果当前actionName等于标志结束的ActionName，则退出并认为引擎成功结束
			if (StringUtils.equals(currentActionName, endActionName)) {
				log.info("Meet action [" + currentActionName + "], end the SequenceActionEngine.");
				return ExecuteResult.SUCCESS;
			}
			// 如果当前actionName等于标志运行失败的ActionName，退出引擎并抛出异常
			if (StringUtils.equals(currentActionName, EOF.fail.name())) {
				log.error("Meet action [fail], stop the SequenceActionEngine");
				return ExecuteResult.FAILED;
			}
			// 如果要运行的actionName在工作计划中不存在，则抛出异常
			if (!actions.containsKey(currentActionName)) {
				log.error("Doesn't found any action named [" + currentActionName + "] in this Workflow.");
				return ExecuteResult.FAILED;
			}
			log.info("Current action is [" + currentActionName + "]");
			Action action = actions.get(currentActionName);
			OperateCode oc = action.execute();
			log.info("Action [" + currentActionName + "] is " + oc.name());
			String nextAction = null;
			Jump j = jumpMap.get(currentActionName);
			switch (oc) {
			case SUCCESS:
				nextAction = j.getSucJumpTo();
				break;
			case FAILED:
				nextAction = j.getErrJumpTo();
				break;
			case KILL:
			default:
				log.info("Kill the engine.");
				return ExecuteResult.KILL;
			}
			currentActionName = nextAction;

			try {
				Thread.sleep(getHalfTime());
			} catch (InterruptedException e) {
				return ExecuteResult.KILL;
			}
		}
	}