public JobPo take(String taskTrackerNodeGroup, String taskTrackerIdentity) {
        while (true) {
            JobPo jobPo = get(taskTrackerNodeGroup);
            if (jobPo == null) {
                DotLogUtils.dot("Empty JobQueue, taskTrackerNodeGroup:{}, taskTrackerIdentity:{}", taskTrackerNodeGroup, taskTrackerIdentity);
                return null;
            }
            // update jobPo
            PeriodUtils.start();
            try {
                if (lockJob(taskTrackerNodeGroup, jobPo.getJobId(),
                        taskTrackerIdentity, jobPo.getTriggerTime(),
                        jobPo.getGmtModified())) {
                    jobPo.setTaskTrackerIdentity(taskTrackerIdentity);
                    jobPo.setIsRunning(true);
                    jobPo.setGmtModified(SystemClock.now());
                    return jobPo;
                }
            } finally {
                PeriodUtils.end("AbstractPreLoader.lockJob taskId:{}", jobPo.getTaskId());
            }
        }
    }
@author Robert HG (254963746@qq.com) on 8/14/15.
lts-core/src/main/java/com/github/ltsopensource/queue/AbstractPreLoader.java