Browse Source

waitting for running thread shutdown before callback thread toStop

WEIZIBIN 6 years ago
parent
commit
4e8e049a7b

+ 14 - 0
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java

@@ -86,6 +86,11 @@ public class XxlJobExecutor  {
         initRpcProvider(ip, port, appName, accessToken);
     }
     public void destroy(){
+        List<JobThread> runningThreads = new ArrayList<>(jobThreadRepository.values());
+        if (logger.isInfoEnabled()) {
+            logger.info("running threads {}", runningThreads);
+        }
+
         // destory jobThreadRepository
         if (jobThreadRepository.size() > 0) {
             for (Map.Entry<Integer, JobThread> item: jobThreadRepository.entrySet()) {
@@ -95,6 +100,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();