diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index 5a38f414..242be6d4 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -84,6 +84,12 @@ public class XxlJobExecutor { initRpcProvider(ip, port, appName, accessToken); } public void destroy(){ + + List runningThreads = new ArrayList<>(jobThreadRepository.values()); + if (logger.isInfoEnabled()) { + logger.info("running threads {}", runningThreads); + } + // destory executor-server stopRpcProvider(); @@ -96,6 +102,15 @@ public class XxlJobExecutor { } jobHandlerRepository.clear(); + for (JobThread runningThread : runningThreads) { + try { + // wait for all job thread push result to callback queue + runningThread.join(); + } catch (InterruptedException e) { + logger.warn("interrupted while stopping {}", runningThread); + break; + } + } // destory JobLogFileCleanThread JobLogFileCleanThread.getInstance().toStop();