构建高性能工作线程 3 工作线程
构建高性能工作线程 三 工作线程
工作线程
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; } }