From 1a2b07f01ba4616fd9e894dddf474b56d020158c Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期一, 07 四月 2025 15:18:51 +0800 Subject: [PATCH] 整理版本 --- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java | 132 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 132 insertions(+), 0 deletions(-) diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java new file mode 100644 index 0000000..5bceac7 --- /dev/null +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java @@ -0,0 +1,132 @@ +package com.dy.rtuMw.server.rtuData; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + + +public class TaskPool { + + private static Logger log = LogManager.getLogger(TaskPool.class.getName()) ; + + private static List<TaskSurpport> tasks = new ArrayList<TaskSurpport>() ; + + private static Integer taskTotal = 0 ; + + private static TreeConfig taskTreeConf ; + + + public static void setTaskTreeCofig(TreeConfig conf){ + taskTreeConf = conf ; + } + + /** + * 寰楀埌浠诲姟鏍戝疄渚嬫�绘暟 + * @return + */ + public static Integer totalTasks() { + return taskTotal ; + } + + + /** + * 寰楀埌浠诲姟 + * 澶氱嚎绋嬬幆澧冧笅杩愯 + * @return + */ + public static TaskSurpport popTask(){ + synchronized(tasks){ + TaskSurpport t = (tasks.size() > 0)?tasks.get(0):null ; + if(t != null){ + tasks.remove(0) ; + }else{ + try { + t = newTaskTree() ; + } catch (Exception e) { + log.error(e.getMessage() == null?"瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞℃爲澶辫触锛�" : e.getMessage(), e); + } finally { + if(t == null){ + log.error("瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞″け璐ワ紒" ); + }else{ + taskTotal++ ; + } + } + } + + return t ; + } + } + + /** + * 鏀惧洖浠诲姟 + * 澶氱嚎绋嬬幆澧冧笅杩愯 + * 杩欓噷闇�瑕佸悓姝ラ攣锛屽洜涓轰笂闈㈡柟娉曚腑鎵ц瀹宼asks.get(0)涓旀湭鎵цtasks.remove(0)鏈熼棿锛屾湰鏂规硶鎵ц骞朵笖鎵ц瀹岋紝閭d箞鍚庢湡灏变細鍑轰贡瀛� + * @param t + */ + public static void freeAndCleanTask(TaskSurpport t){ + synchronized(tasks) { + if (t != null) { + boolean find = false; + for (TaskSurpport tin : tasks) { + if (tin == t) { + find = true; + break; + } + } + if (!find) { + t.cleanMeAndSubs(); + tasks.add(0, t); + } + } + } + } + + /** + * 瀹炰緥鍖栦换鍔″璞℃爲 + * @return + * @throws Exception + */ + private static TaskSurpport newTaskTree() throws Exception{ + TaskSurpport t = null ; + if(taskTreeConf != null){ + t = newTask(null, taskTreeConf.taskConf, taskTreeConf.subTreeConfs) ; + } + return t ; + } + + private static TaskSurpport newTask(TaskSurpport root, TaskConfig taskConf, TreeConfig[] subTreeConfs) throws Exception{ + TaskSurpport t = null ; + if(taskConf != null){ + t = instanceTask(taskConf.clazz) ; + if(t != null){ + t.conf = taskConf ; + t.root = root ; + if(root == null){ + root = t ; + } + newSubTask(root, t, subTreeConfs); + } + } + return t ; + } + private static void newSubTask(TaskSurpport root, TaskSurpport parent, TreeConfig[] treeConfs)throws Exception{ + if(parent != null && treeConfs != null && treeConfs.length > 0){ + parent.subTasks = new TaskSurpport[treeConfs.length] ; + for(int i = 0 ; i < treeConfs.length; i++){ + parent.subTasks[i] = newTask(root, treeConfs[i].taskConf, treeConfs[i].subTreeConfs) ; + } + } + } + private static TaskSurpport instanceTask(String clazz)throws Exception{ + Class<?> c = Class.forName(clazz); + if (c == null) { + throw new Exception("瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞℃爲澶辫触锛佷换鍔$被涓�" + clazz + "锛�"); + }else{ + return (TaskSurpport)c.getDeclaredConstructor().newInstance(); + //return (TaskSurpport)c.newInstance(); + } + } + +} -- Gitblit v1.8.0