读书人

构建高性能工作线程 3 工作线程

发布时间: 2012-12-30 10:43:15 作者: rapoo

构建高性能工作线程 三 工作线程

工作线程

public abstract class WorkThread implements Runnable, Serializable{    /** 线程池的参数是否改变 */    private boolean isPoolSizeAliveTimeModf = false;    /** JDK 线程池 spring封装 扩展实现的线程池 */    private MyThreadPoolTaskExecutor taskExecutor;    /** 核心线程数 */    private static int corePoolSize;    /** 最大线程数 */    private static int maximumPoolSize;    /** 线程池维护线程所允许的空闲时间 */    private static int keepAliveTime;    public WorkThread(TaskExecutor taskExecutor) {      this.taskExecutor = (MyThreadPoolTaskExecutor) taskExecutor;    }        public final void run() {        try {             // 如果线程池参数有变化,则重置          if (isPoolSizeAliveTimeModf()) {                 taskExecutor.setCorePoolSize(corePoolSize);                 taskExecutor.setMaxPoolSize(maximumPoolSize);                 taskExecutor.setKeepAliveSeconds(keepAliveTime);            }            //抽象函数,供子类实现            doTask();        } catch (Exception e) {            e.printStackTrace();        }    }        //任务工作    public abstract void doTask() throws Exception;   //获取缓冲队列QUEUE,用于维护监控   public BlockingQueue getQueue() {        return taskExecutor.getThreadPoolExecutor().getQueue();   }   //获取队列size,用于维护监控   public int getQueueSize() {      if (this.getQueue() instanceof LinkedBlockingQueue) {         return this.getQueue().size();      } else {         return this.getQueue().size();      }   }   //如果线程池中的参数有变化,自动调用update方法   public void update(Observable observable, Object obj) {       if (obj instanceof Map) {           HashMap<String, Integer> poolMap = (HashMap<String, Integer>) obj;           //打印 线程池  历史大小 和 要更改的大小       corePoolSize = poolMap.get("corePoolSize");           maximumPoolSize = poolMap.get("maximumPoolSize");           keepAliveTime = poolMap.get("keepAliveTime");           //一定要把值设到线程池中       taskExecutor.setCorePoolSize(corePoolSize);           taskExecutor.setMaxPoolSize(maximumPoolSize);           taskExecutor.setKeepAliveSeconds(keepAliveTime);       }   }   public MyThreadPoolTaskExecutor getTaskExecutor() {      return taskExecutor;   }   public void setMaximumPoolSize(int maximumPoolSize) {      this.maximumPoolSize = maximumPoolSize;   }   public boolean isPoolSizeAliveTimeModf() {      return isPoolSizeAliveTimeModf;   }   public void setKeepAliveTime(int keepAliveTime) {      this.keepAliveTime = keepAliveTime;   }}

?






读书人网 >编程

热点推荐