范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

玩转SpringBoot之定时任务Scheduled线程池配置

  序言
  对于定时任务,在SpringBoot中只需要使用@Scheduled 这个注解就能够满足需求,它的出现也给我们带了很大的方便,我们只要加上该注解,并且根据需求设置好就可以使用定时任务了。
  但是,我们需要注意的是,  @Scheduled 并不一定会按时执行  。
  因为使用@Scheduled 的定时任务虽然是  异步执行  的,但是,不同的定时任务之间  并不是并行  的!!!!!!!!
  在其中一个定时任务没有执行完之前,其他的定时任务即使是到了执行时间,也是不会执行的,它们会进行排队。
  也就是如果你想你不同的定时任务互不影响,到时间就会执行,那么你最好将你的定时任务方法自己搞成异步方法,这样,定时任务其实就相当于调用了一个线程执行任务,一瞬间就结束了。比如使用:  @Async
  当然,也可以勉强将你的定时任务当做都会定时执行。但是,作为一个合格的程序员
  那么,如何将@Scheduled实现的定时任务变成异步的呢?此时你需要对@Scheduled进行线程池配置。
  回到顶部  配置示例package com.java.navtool.business.config;  import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.task.TaskExecutor; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.config.ScheduledTaskRegistrar;  import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor;  /**  * @author :mmzsblog.cn  * @date :Created in 2021/7/27 17:46  * @description:spring-boot 多线程  @Scheduled注解 并发定时任务的解决方案  * @modified By:  * @version:  */  @Configuration @EnableScheduling public class ScheduleConfig implements SchedulingConfigurer {      @Override     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {         taskRegistrar.setScheduler(taskExecutor());     }      public static final String EXECUTOR_SERVICE = "scheduledExecutor";      @Bean(EXECUTOR_SERVICE)     public TaskExecutor taskExecutor() {         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();         // 设置核心线程数         executor.setCorePoolSize(Runtime.getRuntime().availableProcessors());         // 设置最大线程数         executor.setMaxPoolSize(Runtime.getRuntime().availableProcessors() * 10);         // 设置队列容量         executor.setQueueCapacity(Runtime.getRuntime().availableProcessors() * 10);         // 设置线程活跃时间(秒)         executor.setKeepAliveSeconds(10);         // 设置默认线程名称         executor.setThreadNamePrefix("scheduled-");         // 设置拒绝策略         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());         // 等待所有任务结束后再关闭线程池         executor.setWaitForTasksToCompleteOnShutdown(true);         return executor;     }  }
  附带介绍一下线程池的几个参数。需要彻底搞懂,不要死记硬背哦!
  回到顶部  线程池参数1、corePoolSize(必填):核心线程数。  2、maximumPoolSize(必填):最大线程数。  3、keepAliveTime(必填):线程空闲时长。如果超过该时长,非核心线程就会被回收。  4、unit(必填):指定keepAliveTime的时间单位。常用的有:TimeUnit.MILLISECONDS(毫秒)、TimeUnit.SECONDS(秒)、TimeUnit.MINUTES(分)。  5、workQueue(必填):任务队列。通过线程池的execute()方法提交的Runnable对象将存储在该队列中。  6、threadFactory(可选):线程工厂。一般就用默认的。  7、handler(可选):拒绝策略。当线程数达到最大线程数时就要执行饱和策略。
  回到顶部  说下核心线程数和最大线程数的区别:拒绝策略可选值:1、AbortPolicy(默认):放弃任务并抛出RejectedExecutionException异常。  2、CallerRunsPolicy:由调用线程处理该任务。  3、DiscardPolicy:放弃任务,但是不抛出异常。可以配合这种模式进行自定义的处理方式。  4、DiscardOldestPolicy:放弃队列最早的未处理任务,然后重新尝试执行任务。  线程池执行流程:
  上个流程图,先试着自己看下能不能看懂:
  简短的总结下线程池执行流程:1、一个任务提交到线程池后,如果当前的线程数没达到核心线程数,则新建一个线程并且执行新任务,注意一点,这个新任务执行完后,该线程不会被销毁;  2、如果达到了,则判断任务队列满了没,如果没满,则将任务放入任务队列;  3、如果满了,则判断当前线程数量是否达到最大线程数,如果没达到,则创建新线程来执行任务,注意,如果线程池中线程数量大于核心线程数,每当有线程超过了空闲时间,就会被销毁,直到线程数量不大于核心线程数;  4、如果达到了最大线程数,并且任务队列满了,就会执行饱和策略;
  本文转自https://www.cnblogs.com/mmzs/p/16057742.html

机器人四大巨头业绩下滑?国产的春天要来了2019年,是一个拐点。ABB发那科安川和KUKA财年业绩出现了不同程度的下滑发那科2018Q4营收同比下滑19。80,连续4季度下滑ABB2019Q1收入营业利润同比降低6安川电这个采摘水果的机器人,手速比农民快多了每到丰收的季节,英国的果农往往十分烦恼。不是担心这些农作物滞销,而是请不到人来采摘这些成熟的果实。现在,机器人正在接管这项乏味的工作,而且做的比人类好多了。英国普利茅斯大学的研究机盘点江苏省工业机器人产业头角崭露,爆发在即在未来,机器人是否会取代人类的工作?这个话题近几年备受关注,伴随着5G人工智能等技术的发展,让机器人真正走进了人们的生活,有了更深的认知,甚至有了威胁意识,其实这是一个好事,起码机2020年中国协作机器人行业市场现状与竞争格局分析协作机器人是一种被设计成能与人类在共同工作空间中进行近距离互动的机器人。协作机器人是工业机器人的一类,顾名思义是指用于同人类工人一起协作。一2019年我国协作机器人市场规模约为13日本机器人是如何与苏联打赢竞赛,在50年内做成完美体系的?在贸易战的当下,特朗普首次登日本战舰,我们不由得会去思考,日本机器人企业是否会受到政治冲击?这对于国内企业到底是机遇还是挑战?说到日本,也许再没有一个国家像日本这样广泛的制造与运用男子国庆深夜突发心梗,险些离世!所有的突如其来,都是蓄谋已久国庆假期第一天天,29岁王先生和朋友吃火锅喝啤酒到深夜,这样的聚餐,对他来说,其实平时也非常频繁。但没想到回家睡觉后,在凌晨2点的时候,突然感觉胸痛得厉害,而且呼吸困难,大汗淋漓。冠心病天天喝三七粉泡水,这5个问题一定要搞清楚中药三七的药理作用较多,具有止血补血抗血栓消肿镇痛保肝利胆的功效,是人们熟知的一种中药材。本草纲目认为,三七的根具有消肿镇痛散瘀的功效。所以很多冠心病患者会将三七根磨成粉泡水喝,来60岁以后,如何延缓衰老,提升生命质量?做好这4方面很重要对人类而言,衰老是一个缓慢出现必然发生的生物学过程,可表现为皮肤皱纹头发花白行动迟缓记忆功能减退等。有人问,60岁以后,如何延缓衰老,提升生命质量?首先我们需要清楚一点,衰老是一个新药非奈利酮获批上市!糖尿病肾病有了新选择,不仅保肾还能护心刚工作时,常常会听到前辈反复说着一句话糖尿病并不可怕,可怕的是糖尿病的并发症。没错,如今一眨眼十几年过去了,对这句话深有体会,尤其是遇到太多的糖尿病肾病的患者,许多患者甚至需要终身降压药降脂药一盒才7片,为何不用大包装?专家说出背后的原因很多高血压高血脂患者发现,这些降压药调脂药大多采用的是7片一盒的包装。很多慢性病患者认为,这种7片一盒的包装是过度包装,增加成本,而且造成极大的浪费,不利于环保,更重要的是不利于保去澳门吃什么?除了玛嘉烈蛋挞,还有这些不可错过的美食澳门除了赌场大三巴及蛋挞,还有许多让你惊喜的美食!在这个适合短期旅行的地方,如果你经过某一家阿宝推荐的店铺,一定要排队进去尝一尝哦李康记豆腐花夏季消暑的好选择,豆腐花绵密嫩滑,入口