package com.tenwa.httpclient.pboc; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class PbocThreadPool implements ServletContextListener { private static final Logger logger = LogManager.getLogger(PbocThreadPool.class);// 引入logger日志 private static volatile ThreadPoolTaskExecutor threadPool; private static boolean flag = false; @Override public void contextInitialized(ServletContextEvent servletContextEvent) { logger.info("==================================PbocThreadPool.contextInitialized.start==============================="); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { try { logger.info("==================================PbocThreadPool.contextDestroyed.start==============================="); if(threadPool != null){ threadPool.shutdown(); logger.info("==================================PbocThreadPool.contextDestroyed.end============shutdown==================="); }else { logger.info("==================================PbocThreadPool.contextDestroyed.end==============================="); } } catch (Exception e) { e.printStackTrace(); logger.info("==================================PbocThreadPool.contextDestroyed.error==============================="); } } public PbocThreadPool(){ } public static ThreadPoolTaskExecutor getInstance(){ logger.info("==================================PbocThreadPool.getInstance.start==============================="); if(!flag){ synchronized (ThreadPoolTaskExecutor.class){ if(threadPool == null){ // 设置线程池线程数量 threadPool = new ThreadPoolTaskExecutor(); // 线程池维护线程的最少数量 threadPool.setCorePoolSize(3); // 线程池维护线程的最大数量 threadPool.setMaxPoolSize(6); //设置线程名称前缀 threadPool.setThreadNamePrefix("bigdata_http_pboc_"); //设置队列长度 threadPool.setQueueCapacity(10); // threadPool.setKeepAliveSeconds(300); // 当调度器shutdown被调用时等待当前被调度的任务完成 threadPool.setWaitForTasksToCompleteOnShutdown(true); threadPool.initialize(); flag = true; } } } return threadPool; } }