自定义线程的使用
自定义多线程
@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(); } } }
一起学java 文章被收录于专栏
分享平时学习心得及见解,还有学习笔记