package org.hy.common.thread; import java.util.Hashtable; import java.util.Map; import org.hy.common.Help; /** * 对线程池中的活动线程,分任务类型的统计其活动线程数 * * @author ZhengWei(HY) * @version V1.0 2011-11-30 */ public class TaskTypeTotal { /** * 统计数据的保存对象 * * Map.Key 为任务类型 * Map.Value 为任务对象 */ private Map<String ,TaskTypeTotalInfo> totalMap; public TaskTypeTotal() { this.totalMap = new Hashtable<String ,TaskTypeTotalInfo>(); } /** * 获取任务类型的个数 * * @return */ public int getTaskTypeCount() { return this.totalMap.size(); } /** * 获取某一任务类型的活动线程数 * * @param i_TaskType * @return */ public long getActiveCount(String i_TaskType) { if ( Help.isNull(i_TaskType) ) { throw new NullPointerException("Task Type is null"); } if ( this.totalMap.containsKey(i_TaskType) ) { return this.totalMap.get(i_TaskType).getActiveCount(); } else { return 0; } } /** * 活动的任务类型数++ * * @param i_TaskType */ public void active(String i_TaskType) { if ( Help.isNull(i_TaskType) ) { throw new NullPointerException("Task Type is null"); } this.taskTypeTotalChange(i_TaskType, 1); } /** * 活动的任务类型数-- * * @param i_TaskType */ public void rest(String i_TaskType) { if ( Help.isNull(i_TaskType) ) { throw new NullPointerException("Task Type is null"); } this.taskTypeTotalChange(i_TaskType, -1); } /** * 统一用此方法设置统计数据 * * @param i_TaskType 任务类型 * @param i_OperateType 设置类型 >= 1 为:添加; 其它为减少 */ private synchronized void taskTypeTotalChange(String i_TaskType ,int i_OperateType) { if ( i_OperateType >= 1 ) { if ( this.totalMap.containsKey(i_TaskType) ) { this.totalMap.get(i_TaskType).putActive(); } else { this.totalMap.put(i_TaskType ,new TaskTypeTotalInfo(i_TaskType)); } } else { this.totalMap.get(i_TaskType).outActive(); } } /** * 内部类。分任务类型的统计的元数据信息 */ class TaskTypeTotalInfo { /** 任务类型 */ private String taskType; /** 活动的线程数 */ private long activeCount; public TaskTypeTotalInfo(String i_TaskType) { this.taskType = i_TaskType; this.activeCount = 1; } public String getTaskType() { return this.taskType; } public long getActiveCount() { return this.activeCount; } /** * 活动数加1 */ public void putActive() { this.setActiveCount(1); } /** * 活动数减1 */ public void outActive() { this.setActiveCount(-1); } /** * 统一用此方法设置活动数 * * @param i_OperateType 设置类型 >= 1 为:添加; 其它为减少 */ private synchronized void setActiveCount(long i_OperateType) { if ( i_OperateType >= 1 ) { this.activeCount++; } else { this.activeCount--; } } } }