SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了

本文介绍了在SpringBoot中如何自定义线程池,并展示了使用@Scheduled和@Async实现并发定时任务的方法。同时,针对动态定时任务的需求,提供了两种解决方案:实现SchedulingConfigurer接口和使用ThreadPoolTaskScheduler进行动态添加删除任务。文中还强调了自定义线程池对于服务性能优化和管理的重要性。
摘要由CSDN通过智能技术生成
  • 项目中为了更好的控制线程的使用,我们可以自定义我们自己的线程池,使用方式@Async(“myThreadPool”)

废话太多,直接上代码:

@Scheduled(fixedRate = 100010,initialDelay = 100020)

@Async(“myThreadPoolTaskExecutor”)

//@Async

public void scheduledTest02(){

System.out.println(Thread.currentThread().getName()+“—>xxxxx—>”+Thread.currentThread().getId());

}

//自定义线程池

@Bean(name = “myThreadPoolTaskExecutor”)

public TaskExecutor getMyThreadPoolTaskExecutor() {

ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();

taskExecutor.setCorePoolSize(20);

taskExecutor.setMaxPoolSize(200);

taskExecutor.setQueueCapacity(25);

taskExecutor.setKeepAliveSeconds(200);

taskExecutor.setThreadNamePrefix(“Haina-ThreadPool-”);

// 线程池对拒绝任务(无线程可用)的处理策略,目前只支持AbortPolicy、CallerRunsPolicy;默认为后者

taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

//调度器shutdown被调用时等待当前被调度的任务完成

taskExecutor.setWaitForTasksToCompleteOnShutdown(true);

//等待时长

taskExecutor.setAwaitTerminationSeconds(60);

taskExecutor.initialize();

return taskExecutor;

}

线程池的使用心得

  • java中提供了ThreadPoolExecutor和ScheduledThreadPoolExecutor,对应与spring中的ThreadPoolTaskExecutor和ThreadPoolTaskScheduler,但是在原有的基础上增加了新的特性,在spring环境下更容易使用和控制。

  • 使用自定义的线程池能够避免一些默认线程池造成的内存溢出、阻塞等等问题,更贴合自己的服务特性

  • 使用自定义的线程池便于对项目中线程的管理、维护以及监控。

  • 即便在非spring环境下也不要使用java默认提供的那几种线程池&

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值