线程池

54 阅读1分钟

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:线程池的常见问题