手动创建ThreadPoolExecutor线程池
创建线程池
@Configuration
public class ThreadPoolConfig {
@Bean
public ThreadPoolExecutor GmtThreadPoolExecutor() {
//核心线程数
int corePooSize = 2;
// 最大核心线程数
int maximumPoolSize = 2;
// 无任务时线程最大存活时间
int keepAliveTime = 60;
// 时间单位
TimeUnit unit = TimeUnit.SECONDS;
// 队列规则
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(10);
// 线程池工厂
ThreadFactory threadFactory = Executors.defaultThreadFactory();
// 抛出异常类型
RejectedExecutionHandler handler = new ThreadPoolExecutor.CallerRunsPolicy();
// 创建线程池
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
corePooSize,
maximumPoolSize,
keepAliveTime,
unit,
workQueue,
threadFactory,
handler);
return threadPoolExecutor;
}
}
调用线程池
使用execute 方法 执行任务
@Autowired
ThreadPoolConfig threadPoolConfig;
@Test
void testThreadPool() {
// 调用写好的线程池
ThreadPoolExecutor pool = threadPoolConfig.GmtThreadPoolExecutor();
pool.execute(() -> {
// 业务逻辑,需要进入线程池的任务
// 仅做展示使用,具体使用看个人
poolTask(pool);
});
pool.shutdown();
}
private void poolTask(ThreadPoolExecutor pool) {
int number = 10;
for (int i = 0; i < number; i++) {
System.out.println("i---" + pool.getActiveCount() + i);
}
}
也可以使用Executors创建线程池,但是阿里官方文档并不推荐使用此种方法