| | |
| | | * 多线程环境下运行 |
| | | * @return |
| | | */ |
| | | public static synchronized TaskSurpport popTask(){ |
| | | 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("实例化上行数据处理任务对象失败!" ); |
| | | 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("实例化上行数据处理任务对象失败!" ); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return t ; |
| | | } |
| | | |
| | | return t ; |
| | | } |
| | | |
| | | /** |
| | |
| | | * 这里需要同步锁,因为上面方法中执行完tasks.get(0)且未执行tasks.remove(0)期间,本方法执行并且执行完,那么后期就会出乱子 |
| | | * @param t |
| | | */ |
| | | public static synchronized void freeAndCleanTask(TaskSurpport t){ |
| | | if(t != null){ |
| | | boolean find = false ; |
| | | for(TaskSurpport tin : tasks){ |
| | | if(tin == t){ |
| | | find = true ; |
| | | break ; |
| | | 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) ; |
| | | if (!find) { |
| | | t.cleanMeAndSubs(); |
| | | tasks.add(0, t); |
| | | } |
| | | } |
| | | } |
| | | } |