From ef0ed9877417b7efb3a6ec72121bee56720f6939 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期六, 01 七月 2023 17:28:04 +0800 Subject: [PATCH] 优化提交 --- ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java | 47 ++++++++++++++++++++++++++++++++++++----------- 1 files changed, 36 insertions(+), 11 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java index 0703126..edff059 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java @@ -2,6 +2,8 @@ import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue; import com.ruoyi.alarm.globalAlarm.domain.GuideTask; +import com.ruoyi.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.threads.TaskThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -11,21 +13,25 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.PriorityBlockingQueue; +import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; + /** * @ClassName QueueManager - * @Description: + * @Description: 闃熷垪绠$悊 * @Author 鍒樿嫃涔� * @Date 2023/6/29 21:09 * @Version 1.0 */ @Component +@Slf4j(topic = "guideQueue") public class QueueManager { @Autowired private QueueTaskExecutor taskExecutor; private Map<String, TaskThread> threadMap = new ConcurrentHashMap<>(); + /*鍐呴儴闈欐�佺被*/ private static class TaskThread { private Thread thread; private GuideTask currentTask; @@ -48,36 +54,55 @@ } } - public void addTaskToQueue(String queueName, GuideTask task) { - PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(queueName); + /** + * 寮曞浠诲姟鍏ラ槦 + * 鍒樿嫃涔� + * 2023/6/30 8:57 + */ + public void addTaskToQueue(String cameraId, GuideTask task) { + /*閫氳繃鐩告満ID鑾峰彇寮曞闃熷垪锛屽苟灏嗗紩瀵间换鍔″姞鍏ラ槦鍒�*/ + PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId); + if(StringUtils.isNull(guideTaskQueue)) + { + log.info("鐩告満鏈櫥褰曪紝娌℃湁闃熷垪"); + } + log.debug("鏂颁换鍔″叆闃�:"+task.getAlarmId()); guideTaskQueue.add(task); - TaskThread currentTaskThread = threadMap.get(queueName); + /*鑾峰彇璇ョ浉鏈虹殑褰撳墠鎵ц绾跨▼*/ + TaskThread currentTaskThread = threadMap.get(cameraId); + //濡傛灉闃熷垪褰撳墠绾跨▼姝e湪杩愯锛岃嫢鍏ラ槦浠诲姟浼樺厛绾уぇ浜庡綋鍓嶄换鍔′紭鍏堢骇锛屽垯缁堟褰撳墠绾跨▼ if (currentTaskThread != null && task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) { currentTaskThread.getThread().interrupt(); } - - // Start a new thread if no thread is currently running for the queue + //濡傛灉闃熷垪褰撳墠娌℃湁绾跨▼姝e湪杩愯锛屽垯鍚姩鏂扮嚎绋� if (currentTaskThread == null || !currentTaskThread.getThread().isAlive()) { - Thread newThread = createThread(queueName, guideTaskQueue); - threadMap.put(queueName, new TaskThread(newThread, task)); + Thread newThread = createThread(cameraId, guideTaskQueue); + threadMap.put(cameraId, new TaskThread(newThread, task)); newThread.start(); } } + /** + * 鍒涘缓绾跨▼ + * 鍒樿嫃涔� + * 2023/6/30 9:04 + */ private Thread createThread(String queueName, PriorityBlockingQueue<GuideTask> queue) { + return new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { GuideTask task = queue.take(); + log.debug("鍙栧嚭闃熷垪鏁版嵁:"+task.getAlarmId()); taskExecutor.processTask(task); - GuidePriorityQueue.printPriorityQueue(); - // Update the current task for the thread + // 鏇存柊绾跨▼鐨勫綋鍓嶄换鍔� TaskThread currentTaskThread = threadMap.get(queueName); if (currentTaskThread != null) { currentTaskThread.setCurrentTask(task); } } catch (InterruptedException e) { - // Thread interrupted, exit the loop + log.info("涓柇褰撳墠绾跨▼"); + //绾跨▼涓柇锛岄��鍑哄惊鐜� Thread.currentThread().interrupt(); } } -- Gitblit v1.9.3