线程池提供了解决线程生命周期开销和资源不足的问题。通过为多个任务重用线程,线程创建的开销被分摊到多个任务中。好处是由于请求到达时线程已经存在,线程创建引入的延迟也被无意间消除了。这样,请求立即得到服务,使应用程序响应更快。并且通过适当调整线程池中的线程数,即当请求数超过一定的阈值时,其他新到达的请求将强制等待,直到获得线程进行处理,从而防止资源短缺。使用spring管理线程池的使用1.创建线程池配置信息threads.properties####业务线程池配置#####是否启用自定义线程池。当为true时,以下参数将生效handler.threads.custom=false#核心线程数handler.threads.corePoolSize=20#最大线程数handler.threads.maximumPoolSize=1000#空闲线程存活时间,单位秒handler。threads.keepAliveTime=100#工作队列大小,0为无限handler.threads.workQueue=02,创建线程池配置,ThreadsPoolConfig.javapackagecom.hk.core.concurrent;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;/***线程池配置*/@ComponentpublicclassThreadsPoolConfig{/***是否启用自定义线程池*/@Value("${handler.threads.custom}")private布尔自定义;/***核心线程数*/@Value("${handler.threads.corePoolSize}")privateintcorePoolSize;/***线程池最大线程数*/@Value("${handler.threads.maximumPoolSize}}")privateintmaximumPoolSize;/***空闲线程存活时间(核心线程无效)*/@Value("${handler.threads.keepAliveTime}")privatelongkeepAliveTime;/***任务队列大小,0为无界队列*/@Value("${handler.threads.workQueue}")privateintworkQueue;publicbooleanisCustom(){returncustom;}publicvoidsetCustom(booleancustom){this.custom=custom;}publicintgetCorePoolSize(){returncorePoolSize;}publicvoidsetCorePoolSize(intcorePoolSize){this.corePoolSize=corePoolSize;}publicintgetMaximumPoolSize(){returnmaximumPoolSize;}publicvoidsetMaximumPoolSize(intmaximumPoolSize){this.maximumPoolSize=maximumPoolSize;}publiclonggetKeepAliveTime(){returnkeepAliveTime;}publicvoidsetKeepAliveTime(longkeepAliveTime){this.keepAliveTime=keepAliveTime;}publicintgetWorkQueue(){returnworkQueue;}publicvoidsetWorkQueue(intworkQueue){this.workQueue=workQueue;}}3、创建线程池处理器管理线程HandlerThreadsPool.javapackagecom.hk.core.concurrent;导入java.util.concurrent.BlockingQueue;导入java.util.concurrent.ExecutorService;导入java.util.concurrent.Executors;导入java.util.concurrent.LinkedBlockingQueue;导入java.util.concurrent.ThreadPoolExecutor;导入java.util.concurrent.TimeUnit;导入javax。annotation.PreDestroy;/***线程管理器*/publicclassHandlerThreadsPool{publicExecutorServiceexecutorService;publicHandlerThreadsPool(){//TODO自动生成的构造函数存根this.executorService=Executors.newCachedThreadPool();}publicHandlerThreadsPool(ThreadsPoolConfigconfig){//TODO自动生成的构造函数存根if(config.isCustom()){BlockingQueue
