diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java index 936ef0ed..12a2f2a1 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java @@ -8,14 +8,16 @@ import java.util.List; import java.util.Random; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicInteger; /** * Created by xuxueli on 17/3/10. */ public class ExecutorRouteRound extends ExecutorRouter { - private static ConcurrentMap routeCountEachJob = new ConcurrentHashMap(); + private static ConcurrentMap routeCountEachJob = new ConcurrentHashMap<>(); private static long CACHE_VALID_TIME = 0; + private static int count(int jobId) { // cache clear if (System.currentTimeMillis() > CACHE_VALID_TIME) { @@ -23,11 +25,16 @@ public class ExecutorRouteRound extends ExecutorRouter { CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24; } - // count++ - Integer count = routeCountEachJob.get(jobId); - count = (count==null || count>1000000)?(new Random().nextInt(100)):++count; // 初始化时主动Random一次,缓解首次压力 + AtomicInteger count = routeCountEachJob.get(jobId); + // 初始化时主动Random一次,缓解首次压力 + if (count == null || count.get() > 1000000) { + count = new AtomicInteger(new Random().nextInt(100)); + } else { + // count++ + count.addAndGet(1); + } routeCountEachJob.put(jobId, count); - return count; + return count.get(); } @Override