1.线程的获取方式
1.实现Runnable 接口
2.继承Thread 类
3.通过线程池来获取线程(四种线程池)
2.线程池必要性
线程是开发中常用到的,但是如果没有定义线程池,程序不断的创建,销毁线程,需要消耗很多时间,所以我们定义线程池可以减小这部分时间,我来实现AsyncConfigurer来配置线程池,先看看这个接口有什么方法
3.线程池的配置
package com.aty.basissmallprogram.config; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; /** * @Description 异步线程池配置 * @Author wy * @Date 2022-01-04 */ @Slf4j @EnableAsync @Configuration public class AsyncConfiguration implements AsyncConfigurer { @Bean("asyncExecutor") public Executor executor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(4); //核心线程数 executor.setMaxPoolSize(8); //最大线程数 executor.setQueueCapacity(200); //队列大小 executor.setThreadNamePrefix("async_executor_default_"); //指定用于新创建的线程名称的前缀。 // 设置拒绝策略:当pool已经达到max size的时候,如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略 executor.setWaitForTasksToCompleteOnShutdown(true); //等待任务在关机时完成--表明等待所有线程执行完 executor.setAwaitTerminationSeconds(10); // 等待时间 (默认为0,此时立即停止),并没等待xx秒后强制停止 executor.initialize(); // 初始化 return executor; } @Override public Executor getAsyncExecutor() { return executor(); } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return (ex, method, params) -> { log.error("Async Exception***********************************************"); log.error("method happen: {}", method); log.error("method params: {}", params); log.error("Exception class: {}", ex.getClass().getName()); log.error("ex.getMessage(): {}", ex.getMessage()); log.error("**************************************************************"); }; } }