skyline há 2 anos atrás
pai
commit
0c725f7c3b

+ 15 - 5
miniapp/src/main/java/com/kym/miniapp/jobs/StartChargeDelayJob.java

@@ -71,15 +71,17 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
         START_DELAY_QUEUE.addAll(delayList);
 
         // 开启线程处理队列消息
+        processDelayedOrders();
+    }
+
+    private void processDelayedOrders() {
         while (true) {
             executor.execute(() -> {
-                ThreadLocal<String> threadLocal = new ThreadLocal<>();
+                ThreadLocal<String> threadLocal = ThreadLocal.withInitial(() -> null); // 初始化为空值,避免使用new ThreadLocal()
                 log.info("预约充电订单处理线程:{}", Thread.currentThread().getName());
                 DelayedItem<DelayChargeOrder> delayedItem;
 
                 try {
-                    // 线程休眠100ms
-                    Thread.sleep(100);
                     delayedItem = START_DELAY_QUEUE.take();
                     log.info("出队预约充电订单:{},队列剩余:{}", delayedItem.data.getStartChargeSeq(), START_DELAY_QUEUE.size());
                     // 启动充电
@@ -87,8 +89,8 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
                     threadLocal.set(order.getStartChargeSeq());
                     chargeService.queryStartCharge(order.getUserId(), order.getConnectorId(), null, false, null, null);
                     log.info("预约充电启动成功:用户:{},订单号:{},预约启动时间:{}", order.getUserId(), order.getStartChargeSeq(), order.getStartTime());
-                    // 线程休眠100ms
-                    Thread.sleep(200);
+                    // 线程休眠250ms
+                    Thread.sleep(250);
                 } catch (Exception e) {
                     if (e instanceof InterruptedException) {
                         log.error("预约充电队列take异常", e);
@@ -107,6 +109,14 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
                     threadLocal.remove();
                 }
             });
+            if (!executor.isTerminated()) {
+                try {
+                    Thread.sleep(100);
+                } catch (InterruptedException e) {
+                    log.error("Delay queue processing interrupted.", e);
+                    return;
+                }
+            }
         }
     }