diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java index f5af5520..3b4edcab 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java @@ -48,7 +48,8 @@ public class JobScheduleHelper { while (!toStop) { - // 匹配任务 + // 扫描任务 + long start = System.currentTimeMillis(); Connection conn = null; PreparedStatement preparedStatement = null; try { @@ -143,10 +144,11 @@ public class JobScheduleHelper { } } } + long cost = System.currentTimeMillis()-start; - // 随机休眠1s内 + // next second, align second try { - TimeUnit.MILLISECONDS.sleep(500+new Random().nextInt(500)); + TimeUnit.MILLISECONDS.sleep(cost<1000?(1000-cost):100); } catch (InterruptedException e) { if (!toStop) { logger.error(e.getMessage(), e); @@ -167,6 +169,7 @@ public class JobScheduleHelper { @Override public void run() { + // align second try { TimeUnit.MILLISECONDS.sleep(System.currentTimeMillis()%1000 ); } catch (InterruptedException e) { @@ -178,6 +181,7 @@ public class JobScheduleHelper { int lastSecond = -1; while (!toStop) { + long start = System.currentTimeMillis(); try { // second data List ringItemData = new ArrayList<>(); @@ -199,7 +203,7 @@ public class JobScheduleHelper { } lastSecond = nowSecond; - + // ring trigger logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = " + Arrays.asList(ringItemData) ); if (ringItemData!=null && ringItemData.size()>0) { // do trigger @@ -215,9 +219,11 @@ public class JobScheduleHelper { logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread error:{}", e); } } + long cost = System.currentTimeMillis() - start; + // next second, align second try { - TimeUnit.SECONDS.sleep(1); + TimeUnit.MILLISECONDS.sleep(1000-cost); } catch (InterruptedException e) { if (!toStop) { logger.error(e.getMessage(), e);