返回顶部
首页 > 资讯 > 精选 >SpringBoot中的Scheduled单线程执行问题怎么解决
  • 664
分享到

SpringBoot中的Scheduled单线程执行问题怎么解决

2023-07-02 14:07:53 664人浏览 独家记忆
摘要

本篇内容主要讲解“SpringBoot中的Scheduled单线程执行问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springBoot中的Scheduled单线程执行问题怎么解决”

本篇内容主要讲解“SpringBoot中的Scheduled单线程执行问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习springBoot中的Scheduled单线程执行问题怎么解决”吧!

问题描述

在一次SpringBoot中使用Scheduled定时任务时,发现某一个任务出现执行占用大量资源,会导致其他任务也执行失败。
类似于以下模拟场景,test1定时任务模拟有五秒钟执行时间,这时会同步影响到test2任务的执行,导致test2任务也变成五秒执行一次。

    @Scheduled(fixedRate = 1000)    public void test1() throws InterruptedException {        log.info(Thread.currentThread().getName() + " | task01 ");        Thread.sleep(5000);    }    @Scheduled(fixedRate = 2000)    public void test2() {        log.info(Thread.currentThread().getName() + " | task02 ");    }

SpringBoot中的Scheduled单线程执行问题怎么解决

原因分析:

经过相关资料查阅,发现Scheduled定时任务默认的线程数只有一个,进行定时任务调度时会同步的去调度,一个执行完成后再执行另一个,这是导致该问题的直接原因。

解决方案:

    @Bean    public TaskScheduler taskScheduler() {        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();        // 设置线程数量        taskScheduler.setPoolSize(50);        return taskScheduler;    }

添加一个配置,设置TaskScheduler线程数为多个,这样再执行时就会异步执行了,各个定时任务间互不影响。

SpringBoot中的Scheduled单线程执行问题怎么解决

补充:

使用以下Java的util包中带的TimerTask也可以进行定时任务的执行。
以下参数中TimerTask是执行的任务,0表示第一次延迟0秒执行,3000表示每3000毫秒执行一次。

// true表示定时任务创建为守护线程                        Timer timer = new Timer(true);                        //timer.scheduleAtFixedRate();                        timer.schedule(new TimerTask() {                            @Override                            public void run() {                                logger.info(Thread.currentThread().getName() + "************"+ftpGaFilePrefix);                            }                        }, 0, 3000);

到此,相信大家对“SpringBoot中的Scheduled单线程执行问题怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: SpringBoot中的Scheduled单线程执行问题怎么解决

本文链接: https://lsjlt.com/news/342449.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作