From 7f5d914898c9d05942705ce7d80c0d14a8174df8 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期二, 19 十二月 2023 15:57:14 +0800 Subject: [PATCH] 1、common模块优化代码; 2、通信中间件优化代码,队列遍历由递归调用改为while循环,原因是队列数据量大时递归调易产生栈溢出,HashTable多线程应用时仍有线程安全问题,改为HashMap+同步锁; 3、RTU模拟器和模拟器控制服务增加report命令 --- pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 48 insertions(+), 12 deletions(-) diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java index 266d88f..3009cc9 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java @@ -17,24 +17,63 @@ * 鍦ㄥ崟绾跨▼鐜涓繍琛� */ @Override - public Integer excute() { + public Integer execute() { try{ - return dealRtuUpData() ; + dealRtuUpData() ; }catch(Exception e){ log.error(e); } - return null ; + return RtuDataCache.size()>0?0:1 ; } - /** * 澶勭悊涓婅鏁版嵁 */ - public Integer dealRtuUpData() { + public void dealRtuUpData() { + Node first = RtuDataCache.getFirstQueueNode() ; + if(first != null){ + Node last = RtuDataCache.getLastQueueNode() ; + while (last != null){ + last = this.doDealRtuUpData(first, last); + } + } + } + + /** + * 澶勭悊缂撳瓨鐨勪笂琛屾暟鎹妭鐐� + * @param first 绗竴涓妭鐐� + * @param last 鏈�鍚庝竴涓妭鐐� + */ + private Node doDealRtuUpData(Node first, Node last){ + if(last != null){ + if(first != last){ + //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉� + Node pre = last.pre ; + dealNode(last) ; + return pre ; + }else{ + //鍋滄 + return null ; + } + }else{ + return null ; + } + } + + + //////////////////////////////////////////////// + // + //浠ヤ笅瀹炵幇锛岄噰鐢ㄤ簡閫掑綊璋冪敤锛屽綋闃熷垪缂撳瓨缁撶偣寰堝鏃讹紝浼氫骇鐢熸爤婧㈠嚭寮傚父 + // + //////////////////////////////////////////////// + /** + * 澶勭悊涓婅鏁版嵁 + */ + public Integer dealRtuUpData_() { Node first = RtuDataCache.getFirstQueueNode() ; if(first != null){ Integer count = RtuDataCache.size() ; Node last = RtuDataCache.getLastQueueNode() ; - this.doDealRtuUpData(first, last); + this.doDealRtuUpData_(first, last); return count ; } return null ; @@ -45,18 +84,15 @@ * @param first 绗竴涓妭鐐� * @param last 鏈�鍚庝竴涓妭鐐� */ - private void doDealRtuUpData(Node first, Node last){ + private void doDealRtuUpData_(Node first, Node last){ if(last != null){ //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉� Node pre = last.pre ; dealNode(last) ; - if(first != null && first != last){ + if(first != last){ doDealRtuUpData(first, pre) ; - }else if(first != null && first == last){ + }else{ //鍋滄 - }else if(first == null){ - //杩欑鎯呭喌涓嶄細瀛樺湪 - doDealRtuUpData(null, pre) ; } } } -- Gitblit v1.8.0