|
@@ -71,12 +71,16 @@ public class StopChargeDelayJob implements DelayService<DelayChargeOrder> {
|
|
|
var delayList = delayChargeOrderList.stream().map(delay -> new DelayedItem<>(delay, delay.getEndTime())).toList();
|
|
var delayList = delayChargeOrderList.stream().map(delay -> new DelayedItem<>(delay, delay.getEndTime())).toList();
|
|
|
STOP_DELAY_QUEUE.addAll(delayList);
|
|
STOP_DELAY_QUEUE.addAll(delayList);
|
|
|
|
|
|
|
|
- // 开启线程处理队列消息
|
|
|
|
|
- executor.execute(() -> {
|
|
|
|
|
- ThreadLocal<String> threadLocal = new ThreadLocal<>();
|
|
|
|
|
- log.info("预约停止充电订单处理线程:{}", Thread.currentThread().getName());
|
|
|
|
|
- DelayedItem<DelayChargeOrder> delayedItem;
|
|
|
|
|
- while (true) {
|
|
|
|
|
|
|
+ processDelayedOrders();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void processDelayedOrders() {
|
|
|
|
|
+ while (true) {
|
|
|
|
|
+ executor.execute(() -> {
|
|
|
|
|
+ ThreadLocal<String> threadLocal = ThreadLocal.withInitial(() -> null); // 初始化为空值,避免使用new ThreadLocal()
|
|
|
|
|
+ log.info("预约充电订单处理线程:{}", Thread.currentThread().getName());
|
|
|
|
|
+ DelayedItem<DelayChargeOrder> delayedItem;
|
|
|
|
|
+
|
|
|
try {
|
|
try {
|
|
|
Thread.sleep(100);
|
|
Thread.sleep(100);
|
|
|
delayedItem = STOP_DELAY_QUEUE.take();
|
|
delayedItem = STOP_DELAY_QUEUE.take();
|
|
@@ -105,12 +109,18 @@ public class StopChargeDelayJob implements DelayService<DelayChargeOrder> {
|
|
|
} finally {
|
|
} finally {
|
|
|
threadLocal.remove();
|
|
threadLocal.remove();
|
|
|
}
|
|
}
|
|
|
|
|
+ });
|
|
|
|
|
+ if (!executor.isTerminated()) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ Thread.sleep(100);
|
|
|
|
|
+ } catch (InterruptedException e) {
|
|
|
|
|
+ log.error("Delay queue processing interrupted.", e);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public boolean addToDelayQueue(DelayedItem<DelayChargeOrder> delayedItem) {
|
|
public boolean addToDelayQueue(DelayedItem<DelayChargeOrder> delayedItem) {
|
|
|
return STOP_DELAY_QUEUE.add(delayedItem);
|
|
return STOP_DELAY_QUEUE.add(delayedItem);
|