package com.nms.server.thread.dataCollect; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.Future; import org.apache.log4j.Logger; import com.nms.server.common.Common; import com.nms.server.common.Constants; import com.nms.server.dao.CommonDao; import com.nms.server.service.CommonService; import com.nms.server.util.ExceptionPrintUtils; //主动收集任务(执行完成,但无结果的任务)结果管理线程 public class NonRltTaskResultCollectManagerThread implements Runnable{ private Logger logger = Logger.getLogger(NonRltTaskResultCollectManagerThread.class); public void run() { CommonDao dao = null; try { // Thread.currentThread().setName("数据(无结果任务的结果数据)收集管理线程"); Thread.currentThread().setName("Data (No result task result data) To Collect Management Thread"); dao = new CommonDao(); CommonService service = new CommonService(dao); //- 非升级操作判断 if(Common.SERVER_UN_UPGRADE_FLAG){//---起什么作用? /** * 向表MISSION_STATE_TABLE中查询,MISSION_TYPE任务类型(1,4,6),IS_LOOP是否为周期任务(1是;0不是): * 一个任务会有多个节点(ip)执行,任务结果表中,一个任务id会有多条,seq_id不同,什么时候任务结果表里会有对应任务id的结果信息?所以从表MISSION_STATE_TABLE开始查 * 按任务类型来: */ //需要收集任务结果的列表(ip:<任务id,>) Map> ipTaskIdsMap = service.getNonRltIpTaskMap(); Iterator ite = ipTaskIdsMap.entrySet().iterator(); int j=0; String key = ""; while(ite.hasNext()) { Entry en = (Entry)ite.next(); String ip = en.getKey().toString(); if(ip!=null&&!"".equals(ip.trim())) { //- 检查线程运行状态 运行中无操作 key = Constants.NONRLTTASK_RESULT_COLLECT+":"+ip; Future future = Common.getFutureMap().get(key); if(future != null && !future.isCancelled() && !future.isDone()){ //运行中 logger.info("对"+ip+"的任务结果(对于该有结果,而无结果的任务)收集执行线程 运行中 不再启动新收集线程"); continue; } Map taskInfoMap = (Map)en.getValue();//当前ip上执行成功的任务id // future = Common.service.submit(new NonRltTaskResultCollectThread("任务结果(对于该有结果,而无结果的任务)收集执行线程",ip,Constants.SSL_CLIENT_PORT,taskInfoMap)); future = Common.service.submit(new NonRltTaskResultCollectThread("Task Result(For tasks that should have results,but not results) Collect Execution Thread",ip,Constants.SSL_CLIENT_PORT,taskInfoMap)); //注册 Common.getFutureMap().put(key, future); j++; } } logger.info("*******************************************共"+ipTaskIdsMap.size()+"个节点,任务结果(对于该有结果,而无结果的任务)收集执行线程启动个数:"+j); } } catch (Exception e) { logger.error(ExceptionPrintUtils.printExceptionStack(e)); } finally{ if(dao!=null){ dao.close(); dao=null; } logger.debug("执行结束"); } } public static void main(String[] args) { try { // new InitServerThread().initCommonInfo(new CommonDao()); // NonRltTaskResultCollectManagerThread runThread = new NonRltTaskResultCollectManagerThread(); // Thread thread = new Thread(runThread); // thread.start(); // // Thread.sleep(10000); // // MissionResultThread mrt = new MissionResultThread("rlt"); // mrt.run(); // Map m = new HashMap(); //// String key = ""; // for(int i=0;i<6;i++) { // String key="i="+i; // m.put(key, ":"+i); // } // // Iterator i = m.keySet().iterator(); // while(i.hasNext()) { // String e = (String)i.next(); // System.out.println("key="+e.toString()+",value="+m.get(e).toString()); // } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }