1.第一步:初始化线程池,采用异步的配置,重写异步执行器
getAsyncExecutor()方法,初始化任务处理器线程池,ThreadPoolTaskExecutor;
线程池的配置:
几个关键部分:
(1)添加@Configuration 配置类的注解
(2)添加@ComponentScan 添加扫描的线程所在报道额位置
(3)添加@EnableAsync 开启异步
(4)重写getAsyncExecutor()方法,同时,初始化线程池,并返回
* 另外说明:此处@Configuration 注解的作用,
* 1、使配置类变成了full类型的配置类,spring在加载Appconfig的时候,Appconfig由普通类型转变为cglib代理类型 ,
* 2、在 @Bean method中使用,是单例的,不会创建对个对象
@Slf4j
@Configuration
@ComponentScan("com.qinzhy.mydemo.thread")
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
//初始化线程池
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setMaxPoolSize(10);
taskExecutor.setCorePoolSize(5);
taskExecutor.setQueueCapacity(25);
taskExecutor.initialize();
log.info("线程池初始化成功!!");
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
2.第二步:创建使用线程的服务类,并把它放到spring容器中,单例。
需要的线程的方法需要加异步的注解: @Async
@Service
public class AsyncTaskService {
@Async
public void executeAsyncTask(Integer i){
String name = Thread.currentThread().getName();
System.out.println("当前线程"+name+"执行任务 "+i);
}
@Async
public void executeAsyncTaskPlus(Integer i){
String name = Thread.currentThread().getName();
System.out.println("当前线程"+name+"执行任务 "+i);
}
}
2.第二步:创建使用线程的服务类,并把它放到spring容器中,单例。
需要的线程的方法需要加异步的注解: @Async
@Service
public class AsyncTaskService {
@Async
public void executeAsyncTask(Integer i){
String name = Thread.currentThread().getName();
System.out.println("当前线程"+name+"执行任务 "+i);
}
@Async
public void executeAsyncTaskPlus(Integer i){
String name = Thread.currentThread().getName();
System.out.println("当前线程"+name+"执行任务 "+i);
}
}
3.第三步: 使用: 将任务加入到多线程的任务当中。(测试)
注入对象,调用对应的异步的方法,就会加入到多线程的任务队列中
@RequestMapping("/thread")
@ResponseBody
@Slf4j
@Controller
public class TestThreadController {
@Autowired
private AsyncTaskService asyncTaskService;
@RequestMapping("/test")
public String testThread(){
for (int i = 0 ; i < 1000 ;i++){
asyncTaskService.executeAsyncTask(i);
asyncTaskService.executeAsyncTaskPlus(i);
}
return "success";
}
}



