From b726dc97538b7d4ba71fd06c14161017dd67c2b7 Mon Sep 17 00:00:00 2001 From: xubinbin <1323875150@qq.com> Date: 星期三, 10 五月 2023 15:38:22 +0800 Subject: [PATCH] "@schedule"是Spring框架提供的一种定时任务执行机制,默认情况下它是单线程执行,项目中多次使用fixedRate按指定频率执行任务(不管前面任务是否已经完成),在同时执行多个定时任务时可能会出现阻塞和性能问题,为了解决这种单线程瓶颈问题,将定时任务的执行机制改为支持多线程 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java | 32 +++++++++++++++++--------------- 1 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java index 3d5c294..a351445 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java @@ -1,6 +1,5 @@ package com.genersoft.iot.vmp.gb28181.transmit.callback; -import com.alibaba.fastjson2.JSON; import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; @@ -130,23 +129,26 @@ if (deferredResultMap == null) { return; } - Set<String> ids = deferredResultMap.keySet(); - for (String id : ids) { - DeferredResultEx result = deferredResultMap.get(id); - if (result == null) { + synchronized (this) { + deferredResultMap = map.get(msg.getKey()); + if (deferredResultMap == null) { return; } - if (result.getFilter() != null) { - Object handler = result.getFilter().handler(msg.getData()); - System.out.println(JSON.toJSONString(handler)); - result.getDeferredResult().setResult(handler); - }else { - result.getDeferredResult().setResult(msg.getData()); + Set<String> ids = deferredResultMap.keySet(); + for (String id : ids) { + DeferredResultEx result = deferredResultMap.get(id); + if (result == null) { + return; + } + if (result.getFilter() != null) { + Object handler = result.getFilter().handler(msg.getData()); + result.getDeferredResult().setResult(handler); + }else { + result.getDeferredResult().setResult(msg.getData()); + } + } - + map.remove(msg.getKey()); } - map.remove(msg.getKey()); } - - } -- Gitblit v1.8.0