From c1becf4cbd2e99601ce011c14b8742427249cfb4 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 09 一月 2024 17:25:05 +0800
Subject: [PATCH] 1. 多项调整

---
 src/main/kotlin/cn/flightfeather/supervision/datafetch/FetchController.kt |   35 +++++++++++++++++++++++++++--------
 1 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/src/main/kotlin/cn/flightfeather/supervision/datafetch/FetchController.kt b/src/main/kotlin/cn/flightfeather/supervision/datafetch/FetchController.kt
index 93ecb0f..3fece28 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/datafetch/FetchController.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/datafetch/FetchController.kt
@@ -18,7 +18,8 @@
     }
 
     private val fetchData = mutableListOf<FetchData>()
-    private var shecdule = Executors.newScheduledThreadPool(2)
+    private var schedule = Executors.newScheduledThreadPool(1)
+    private var maintainSchedule = Executors.newScheduledThreadPool(1)
     private var fetchTime: Date = Date()
     private var maintainTime: Date = Date()
 
@@ -32,10 +33,13 @@
         maintainTask()
     }
 
-    private fun fetchTask() {
-        shecdule.scheduleAtFixedRate({
+    private fun fetchTask(isFirst: Boolean = false) {
+        if (!isFirst) {
+            schedule = closeThread(schedule)
+        }
+        schedule.scheduleAtFixedRate({
             fetchTime = Date()
-            if (Date().time - maintainTime.time > (MAINTAIN_PERIOD_MIN + 1) * 60 * 1000) {
+            if (Date().time - maintainTime.time > (MAINTAIN_PERIOD_MIN * 2) * 60 * 1000) {
                 maintainTask()
             }
             fetchData.forEach {
@@ -44,13 +48,28 @@
         }, 0, FETCH_PERIOD_MIN, TimeUnit.MINUTES)
     }
 
-    private fun maintainTask() {
-
-        shecdule.scheduleAtFixedRate({
+    private fun maintainTask(isFirst: Boolean = false) {
+        if (!isFirst) {
+            maintainSchedule = closeThread(maintainSchedule)
+        }
+        maintainSchedule.scheduleAtFixedRate({
             maintainTime = Date()
-            if (Date().time - fetchTime.time > (FETCH_PERIOD_MIN + 1) * 60 * 1000) {
+            if (Date().time - fetchTime.time > (FETCH_PERIOD_MIN * 2) * 60 * 1000) {
                 fetchTask()
             }
         }, 0, MAINTAIN_PERIOD_MIN, TimeUnit.MINUTES)
     }
+
+    private fun closeThread(s: ScheduledExecutorService): ScheduledExecutorService {
+        try {
+            s.shutdown()
+            if (s.awaitTermination(10, TimeUnit.SECONDS)) {
+                s.shutdownNow()
+            }
+        } catch (e: InterruptedException) {
+            e.printStackTrace()
+            s.shutdownNow()
+        }
+        return Executors.newScheduledThreadPool(1)
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3