自定义多线程
@Configuration
@EnableAsync //开启多线程
public class ThreadPoolConfig {
@Bean("taskExecutor")
public Executor asyncThreadExecutor(){
ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
//设置核心线程数
executor.setCorePoolSize(5);
//设置最大线程数
executor.setMaxPoolSize(20);
//设置线程活跃时间(秒)
executor.setKeepAliveSeconds(60);
//设置默认线程名称
executor.setThreadNamePrefix("FYZの个人博客");
//等待所有任务结束后在关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
//执行初始化
executor.initialize();
return executor;
}
}
然后在要使用此线程的上面加上这个@Async("taskExecutor")
注解就OK了
例如
@Component
public class ThreadService {
/**
* 希望此操作在线程池中执行,不会影响原有的主线程
* @param articleMapper
* @param article
*/
@Async("taskExecutor")
public void updateArticleViewCount(ArticleMapper articleMapper, Article article) {
int viewCounts=article.getViewCounts();
Article articleUpdate=new Article();
articleUpdate.setViewCounts(viewCounts+1);
LambdaUpdateWrapper updateWrapper=new LambdaUpdateWrapper();
updateWrapper.eq(Article::getId,article.getId());
//设置 一个为了在多线程环境下线程安全
updateWrapper.eq(Article::getViewCounts,viewCounts);
articleMapper.update(articleUpdate,updateWrapper);
try {
Thread.sleep(5000);
System.out.println("更新完成");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}