|
@@ -1,6 +1,8 @@
|
|
|
package com.qmth.distributed.print.business.threadPool;//package com.qmth.themis.business.threadPool;
|
|
|
|
|
|
import com.qmth.distributed.print.common.contant.SystemConstant;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
@@ -20,15 +22,17 @@ import java.util.concurrent.ThreadPoolExecutor;
|
|
|
*/
|
|
|
@Configuration
|
|
|
public class MyThreadPool extends ThreadPoolTaskExecutor {
|
|
|
+ private final static Logger log = LoggerFactory.getLogger(MyThreadPool.class);
|
|
|
|
|
|
- public MyThreadPool arbitratePoolTaskExecutor = null;
|
|
|
+ public MyThreadPool threadPoolTaskExecutor = null;
|
|
|
+ static final int cpuNum = Runtime.getRuntime().availableProcessors();
|
|
|
|
|
|
@Value("${sys.config.threadPoolCoreSize}")
|
|
|
Integer threadPoolCoreSize;
|
|
|
|
|
|
@PostConstruct
|
|
|
public void init() {
|
|
|
- arbitrateThreadPool();
|
|
|
+ taskThreadPool();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -37,20 +41,26 @@ public class MyThreadPool extends ThreadPoolTaskExecutor {
|
|
|
* @return
|
|
|
*/
|
|
|
@Bean
|
|
|
- public Executor arbitrateThreadPool() {
|
|
|
- if (Objects.isNull(arbitratePoolTaskExecutor)) {
|
|
|
- arbitratePoolTaskExecutor = new MyThreadPool();
|
|
|
- arbitratePoolTaskExecutor.setCorePoolSize(threadPoolCoreSize);//核心线程数
|
|
|
- arbitratePoolTaskExecutor.setMaxPoolSize(threadPoolCoreSize);//最大线程数
|
|
|
- arbitratePoolTaskExecutor.setKeepAliveSeconds(SystemConstant.THREAD_POOL_KEEP_ALIVE_SECONDS);//线程空闲时间
|
|
|
- arbitratePoolTaskExecutor.setQueueCapacity(SystemConstant.THREAD_POOL_QUEUE_CAPACITY);//队列容量
|
|
|
- arbitratePoolTaskExecutor.setThreadNamePrefix(SystemConstant.THREAD_POOL_NAME);
|
|
|
-
|
|
|
+ public Executor taskThreadPool() {
|
|
|
+ if (Objects.isNull(threadPoolTaskExecutor)) {
|
|
|
+ log.info("cpuNum:{}", cpuNum);
|
|
|
+ threadPoolTaskExecutor = new MyThreadPool();
|
|
|
+ if (cpuNum > 0) {
|
|
|
+ threadPoolTaskExecutor.setCorePoolSize(cpuNum);//核心线程数
|
|
|
+ threadPoolTaskExecutor.setMaxPoolSize(cpuNum * 2);//最大线程数
|
|
|
+ } else {
|
|
|
+ threadPoolTaskExecutor.setCorePoolSize(threadPoolCoreSize);//核心线程数
|
|
|
+ threadPoolTaskExecutor.setMaxPoolSize(threadPoolCoreSize * 2);//最大线程数
|
|
|
+ }
|
|
|
+ threadPoolTaskExecutor.setKeepAliveSeconds(SystemConstant.THREAD_POOL_KEEP_ALIVE_SECONDS);//线程空闲时间
|
|
|
+ threadPoolTaskExecutor.setQueueCapacity(SystemConstant.THREAD_POOL_QUEUE_CAPACITY);//队列容量
|
|
|
+ threadPoolTaskExecutor.setThreadNamePrefix(SystemConstant.THREAD_POOL_NAME);
|
|
|
+ threadPoolTaskExecutor.setAllowCoreThreadTimeOut(true);
|
|
|
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
|
|
|
// CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
|
|
|
- arbitratePoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
|
|
- arbitratePoolTaskExecutor.initialize();
|
|
|
+ threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
|
|
+ threadPoolTaskExecutor.initialize();
|
|
|
}
|
|
|
- return arbitratePoolTaskExecutor;
|
|
|
+ return threadPoolTaskExecutor;
|
|
|
}
|
|
|
}
|