1:线程池的分类 默认线程池:ThreadPoolExecutor
定时任务线程池:ScheduledThreadPoolExecutor
2:使用线程池
2.1 普通线程池的创建
private static ThreadPoolExecutor threadPoolExecutor;
public synchronized static ThreadPoolExecutor createPool(){
if (threadPoolExecutor != null) {
return threadPoolExecutor;
}
int cpunumer = Runtime.getRuntime().availableProcessors();
System.out.println(cpunumer);
int corenum = cpunumer*2;
int maxnum = cpunumer*2;
long keepAliviTime = 60;
TimeUnit unit = TimeUnit.SECONDS;
// 抛出异常
ThreadPoolExecutor.AbortPolicy abortPolicy = new ThreadPoolExecutor.AbortPolicy();
threadPoolExecutor = new ThreadPoolExecutor(corenum,maxnum,keepAliviTime,
unit,new ArrayBlockingQueue<>(cpunumer*2*10),abortPolicy);
return threadPoolExecutor;
}
2.2 spring 线程池的使用
@Bean("threadpoolservice")
public Executor asyncServiceExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setBeanName("lizzPool");
executor.setCorePoolSize(4);//配置核心线程数
executor.setMaxPoolSize(8);//配置最大线程数
executor.setKeepAliveSeconds(30);
executor.setQueueCapacity(100);//配置队列大小
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//拒绝策略
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.initialize();//执行初始化
// log.info("ThreadPool init success");
return executor;
}
2.3 定时任务线程池
3:线程池的原理
4:线程池的常见问题