SpringBoot實現多執行緒
阿新 • • 發佈:2019-02-20
一.配置多執行緒》在配置/啟動類上添加註解開啟非同步支援:@EnableAsync》在需要執行非同步的方法上新增非同步方法註解:@Async,通過@Async註解表明該方法是一個非同步方法,如果註解在類級別,表明該類下所有方法都是非同步方法,程式碼如下
@Service
public class AsyncTaskService {
@Async
public void executeAsyncTask(Integer i){
System.out.println("執行非同步任務:" + i);
}
}
二.配置執行緒池配置類實現AsyncConfigurer介面,同時在此類新增開啟非同步支援的註解,重寫getAsyncExecutor方法,配置最小/大執行緒數量,以及等待佇列,程式碼如下ThredPoolTaskExcutor的處理流程當池子大小小於corePoolSize,就新建執行緒,並處理請求當池子大小等於corePoolSize,把請求放入workQueue中,池子裡的空閒執行緒就去workQueue中取任務並處理當workQueue放不下任務時,就新建執行緒入池,並處理請求,如果池子大小撐到了maximumPoolSize,就用RejectedExecutionHandler來做拒絕處理當池子的執行緒數大於corePoolSize時,多餘的執行緒會等待keepAliveTime長時間,如果無請求可處理就自行銷燬三.啟動除錯(省略main方法)@Configuration //開啟非同步支援 @EnableAsync public class AsyncTaskConfig implements AsyncConfigurer { @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(5);// 最小執行緒數 taskExecutor.setMaxPoolSize(10);// 最大執行緒數 taskExecutor.setQueueCapacity(25);// 等待佇列 taskExecutor.initialize(); return taskExecutor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return null; } }
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AsyncTaskConfig.class); AsyncTaskService asyncTaskService = context.getBean(AsyncTaskService.class); for(int i = 0; i < 10; i++){ asyncTaskService.executeAsyncTask(i); }