保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

一文搞懂java中常用的定时任务框架单体

  一、阅读收获
  1。了解常用的单体应用定时任务框架
  2。掌握定时任务在单体中如何使用二、本章源码下载
  本章源码下载已分享github三、TimerTimerTask这是jdk自带的java。util。Timer类,这个类允许你调度一个java。util。TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行,一般用的较少。Description:1。TimerTimerTask:(jdk自带)这是java自带的java。util。Timer类,这个类允许你调度一个java。util。TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。Author:jianweildate:2021121413:36publicclassTimerTest{publicstaticvoidmain(String〔〕args){TimerTasktimerTasknewTimerTask(){Overridepublicvoidrun(){System。out。println(taskrun:newDate());}};TimerTasktimerTask2newTimerTask(){Overridepublicvoidrun(){System。out。println(task2run:newDate());多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。inti10;}};idea会提示:使用ScheduledExecutorService代替Timer吧TimertimernewTimer();System。out。println(begin:newDate());安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里是延迟5秒开始执行,之后每3秒执行一次timer。schedule(timerTask,5000,3000);timer。schedule(timerTask2,5000,3000);}}多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。四、ScheduledExecutorServiceScheduledExecutorService也是jdk自带的定时类,可以替代Timerpackagecom。ljw。springboottimer。scheduledExecutorservice;importorg。apache。commons。lang3。concurrent。BasicThreadFactory;importjava。util。Date;importjava。util。concurrent。ScheduledExecutorService;importjava。util。concurrent。ScheduledThreadPoolExecutor;importjava。util。concurrent。TimeUnit;Description:2。ScheduledExecutorService代替Timer(jdk自带)多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。Author:jianweildate:2021121413:42publicclassScheduledExecutorServiceTest{publicstaticvoidmain(String〔〕args)throwsInterruptedException{当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。ScheduledExecutorServiceexecutorServicenewScheduledThreadPoolExecutor(1,newBasicThreadFactory。Builder()。namingPattern(exampleschedulepoold)。daemon(false)。build());System。out。println(begin:newDate());参数:1、任务体2、首次执行的延时时间3、任务执行间隔4、间隔时间单位延迟5秒执行,之后每3秒执行一次executorService。scheduleAtFixedRate(newRunnable(){Overridepublicvoidrun(){dosomethingSystem。out。println(begin:newDate());}},5,3,TimeUnit。SECONDS);}}五、SpringTaskspring提供的类,可引入依赖:dependencygroupIdorg。springframework。bootgroupIdspringbootstarterartifactIddependency复制代码开启定时任务:EnableScheduling使用:在相应的任务方法前加上注解Scheduled即可5。1单线程串行执行ScheduledScheduled注解默认使同一个线程中串行执行,如果只有一个定时任务,这样做肯定没问题,当定时任务增多,如果一个任务卡死,会导致其他任务也无法执行。业务测试:ComponentEnableSchedulingpublicclassSpringTaskTest{Scheduled(cron05)publicvoidrun()throwsInterruptedException{System。out。println(Thread。currentThread()。getName()使用cron{}(System。currentTimeMillis()1000));}}复制代码5。2多线程并发运行Scheduled配置定时器的程池(推荐)解决单线程串行执行任务的问题,需要配置定时器的程池,推荐这种方法配置并注入一个TaskScheduler类bean即可配置定时器的线程池类如下:packagecom。ljw。springboottimer。springtask;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;importorg。springframework。scheduling。TaskScheduler;importorg。springframework。scheduling。concurrent。ThreadPoolTaskScheduler;Description:解决单线程串行执行方式2:Scheduled配置定时器的线程池Author:jianweildate:2021121414:44ConfigurationpublicclassTaskSchedulerConfig{初始化了一个线程池大小为5的TaskScheduler,避免了所有任务都用一个线程来执行returnBeanpublicTaskSchedulertaskScheduler(){ThreadPoolTaskSchedulertaskSchedulernewThreadPoolTaskScheduler();taskScheduler。setPoolSize(5);taskScheduler。setThreadNamePrefix(TaskSchedulerConfigljw);returntaskScheduler;}}业务测试ComponentEnableSchedulingpublicclassSpringTaskTest{Scheduled(cron05)publicvoidrun()throwsInterruptedException{System。out。println(Thread。currentThread()。getName()使用cron{}(System。currentTimeMillis()1000));}Scheduled(fixedRate5000)publicvoidrun1()throwsInterruptedException{System。out。println(Thread。currentThread()。getName()使用fixedRate{}(System。currentTimeMillis()1000));}}5。3多线程并发执行ScheduledAsync配置异步线程池解决单线程串行执行任务的问题,也可以结合异步注解Async实现,但这种方法并不推荐,需要两个注解,代码编写的工作量大还可以解决fixedRate在遇到某些执行任务时间超过配置的时间隔,下次任务时间到了还要等待上次任务执行完成的情况,这是3。2不能解决的。配置异步线程池类如下:packagecom。ljw。springboottimer。springtask;importorg。springframework。context。annotation。Configuration;importorg。springframework。scheduling。annotation。AsyncConfigurer;importorg。springframework。scheduling。annotation。EnableAsync;importorg。springframework。scheduling。concurrent。ThreadPoolTaskExecutor;importjava。util。concurrent。Executor;importjava。util。concurrent。ThreadPoolExecutor;Description:解决单线程串行执行方式1:ScheduledAsync配置异步线程池Author:jianweildate:2021121414:35ConfigurationEnableAsyncpublicclassAsyncConfigimplementsAsyncConfigurer{定义Async默认的线程池ThreadPoolTaskExecutor不是完全被IOC容器管理的bean,可以在方法上加上Bean注解交给容器管理,这样可以将taskExecutor。initialize()方法调用去掉,容器会自动调用returnOverridepublicExecutorgetAsyncExecutor(){intprocessorsRuntime。getRuntime()。availableProcessors();常用的执行器ThreadPoolTaskExecutortaskExecutornewThreadPoolTaskExecutor();核心线程数taskExecutor。setCorePoolSize(10);taskExecutor。setMaxPoolSize(50);线程队列最大线程数,默认:50taskExecutor。setQueueCapacity(100);线程名称前缀taskExecutor。setThreadNamePrefix(AsyncConfigljw);taskExecutor。setRejectedExecutionHandler(newThreadPoolExecutor。CallerRunsPolicy());执行初始化(重要)taskExecutor。initialize();returntaskExecutor;}}业务测试需要加上Async注解ComponentEnableSchedulingpublicclassSpringTaskTest{Scheduled(cron05)Asyncpublicvoidrun()throwsInterruptedException{System。out。println(Thread。currentThread()。getName()使用cron{}(System。currentTimeMillis()1000));}Scheduled(fixedRate5000)Asyncpublicvoidrun1()throwsInterruptedException{System。out。println(Thread。currentThread()。getName()使用fixedRate{}(System。currentTimeMillis()1000));}}如果同时配置了3。2配置定时器的程池和3。3配置异步线程池,并且注解使用了ScheduledAsync,则定时任务使用的线程池为:配置异步线程池5。4Scheduled参数解析cron:通过cron表达式来配置任务执行时间(默认是fixedDelay)initialDelay:定义该任务延迟多少时间才开始第一次执行fixedRate:定义一个按一定频率执行的定时任务。fixedRate每次任务结束后会从任务编排表中找下一次该执行的任务,判断是否到时机执行,fixedRate的任务某次执行时间再长也不会造成两次任务实例同时执行,也要等到上次任务完成,判断是否到时机执行,到就立即执行,与线程池无关,除非用了Async注解,使方法异步,即是使用5。3步骤的配置。(5。2是配置线程池,达不到效果)fixedDelay:定义一个按一定频率执行的定时任务。fixedDelay总是在前一次任务完成后,延时固定时间长度然后再执行下一次任务六、Quartz
  在开发Quartz相关应用时,只要定义了Job(任务),JobDetail(任务描述),Trigger(触发器)和Scheduler(调度器),即可实现一个定时调度能力。
  如果SpringBoot版本是2。0。0以后的,则在springbootstarter中已经包含了quart的依赖,则可以直接引入依赖:dependencygroupIdorg。springframework。bootgroupIdspringbootstarterquartzartifactIddependency6。1。创建任务类方式1:实现Job类的execute方法即可实现一个任务(推荐)任务1如下:packagecom。ljw。springboottimer。quartz。do1;importorg。quartz。Job;importorg。quartz。JobExecutionContext;importorg。quartz。JobExecutionException;importjava。util。Date;Description:我的定时任务方法1Author:jianweildate:2021121416:06publicclassMyTaskService1implementsJob{Overridepublicvoidexecute(JobExecutionContextjobExecutionContext)throwsJobExecutionException{System。out。println(Thread。currentThread()。getName()JobnewDate());}}方式2:继承QuartzJobBean类重写方法即可实现一个任务任务2如下:packagecom。ljw。springboottimer。quartz。do1;importorg。quartz。JobExecutionContext;importorg。quartz。JobExecutionException;importorg。springframework。scheduling。quartz。QuartzJobBean;importjava。util。Date;Description:我的定时任务方法2Author:jianweildate:2021121416:06publicclassMyTaskService2extendsQuartzJobBean{OverrideprotectedvoidexecuteInternal(JobExecutionContextcontext)throwsJobExecutionException{System。out。println(Thread。currentThread()。getName()QuartzJobBeannewDate());}}6。2。配置任务描述和触发器配置类要分别要为每个任务声明两个bean1。JobDetail(任务描述)2。Trigger(触发器)配置调度器信息使用SimpleScheduleBuilder或者CronScheduleBuilderpackagecom。ljw。springboottimer。quartz。do1;importorg。quartz。;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;importjava。util。Date;Description:每个任务都要两步配置1。配置任务描述JobDetail2。配置触发器TriggerAuthor:jianweildate:2021121416:08ConfigurationpublicclassQuartzConfig{创建任务1的JobDetail1returnBeanpublicJobDetailteatQuartzDetail1(){returnJobBuilder。newJob(MyTaskService1。class)job的描述。withDescription(thisisajob1)job的name和group。withIdentity(myTrigger1,myTriggerGroup1)。storeDurably()。build();}创建任务2的JobDetail2returnBeanpublicJobDetailteatQuartzDetail2(){returnJobBuilder。newJob(MyTaskService2。class)job的描述。withDescription(thisisajob2)job的name和group。withIdentity(myTrigger2,myTriggerGroup2)。storeDurably()。build();}创建任务1的Trigger1returnBeanpublicTriggertestQuartzTrigger1(){使用SimpleScheduleBuilder或者CronScheduleBuilderSimpleScheduleBuilderscheduleBuilderSimpleScheduleBuilder。simpleSchedule()设置时间周期单位秒。withIntervalInSeconds(10)。repeatForever();两秒执行一次,Quartz表达式,支持各种牛逼表达式CronScheduleBuildercronScheduleBuilderCronScheduleBuilder。cronSchedule(03?);任务运行的时间,SimpleSchedle类型触发器有效,3秒后启动任务longtimeSystem。currentTimeMillis()31000L;DatestatTimenewDate(time);returnTriggerBuilder。newTrigger()。withDescription()。forJob(teatQuartzDetail1())。withIdentity(myTrigger1,myTriggerGroup1)默认当前时间启动。startAt(statTime)。withSchedule(cronScheduleBuilder)。withSchedule(scheduleBuilder)。build();}创建任务2的Trigger2returnBeanpublicTriggertestQuartzTrigger2(){SimpleScheduleBuilderscheduleBuilderSimpleScheduleBuilder。simpleSchedule()设置时间周期单位秒。withIntervalInSeconds(10)。repeatForever();returnTriggerBuilder。newTrigger()。forJob(teatQuartzDetail2())。withIdentity(myTrigger2,myTriggerGroup2)。withSchedule(scheduleBuilder)。build();}}

七夕乞巧的高二作文穿针乞巧这是最早的乞巧方式,始于汉,流于后世。《西京杂记》说:汉彩女常以七月七日穿七孔针于开襟楼,人具习之。南朝梁宗谋《荆楚岁时记》说:七月七日,是夕人家妇女结彩楼穿七孔……我选择的作文在人生的每个转角处,都要经过一次又一次的选择,而每一个再怎么微不足到的选择,都有可能因此牵连你的一生。我的人生一直没有经历什么难以决择的事情,父母叫我不要迟到,我便早些起……不能再低了,骁龙888Plus1亿像素,12GB512GB仅一款手机是否流畅,不仅要取决于处理器,更要看重运存和存储空间,现在的手机大多数是6GB以上运存,像旗舰机都是8GB起步,厂商也通过虚拟内存拓展技术,将8GB提升到12GB以上,……2016年美丽的雪景作文100字导语:雪花飘飘落下,飘荡在无边的大地上;北风呼呼吹过,吹拂着残枝败叶,吹向远方。下面是小编整理的关于美丽的雪景作文,请同学们认真阅读!【美丽的雪景作文1】雪花飘飘落……手机性价比排行榜芯片方面,目前关注度最高的莫过于联发科,前不久发布的天玑9000、天玑8000系列已经陆续装机落地,旗舰、次旗舰全面布局,还有天玑900、天玑12001300负责中低端,形成了……ios组件化方案对比目前iOS组件化方案主要有三种;URLSchemeProtocolClassTargetActionURLScheme方案实现方式:在启动时,注册组件提供的服务(注册UR……人物故事篇季羡林抄书人物简介季羡林(1911年8月6日mdash;20xx年7月11日),中国山东省聊城市临清人,字希逋,又字齐奘。国际著名东方学大师、语言学家、文学家、国学家、佛学家、史学……为什么会有iphone是穷人手机的片面言论?这明显是水军统一造势,抬高自己贬低别人用的论点之一。真正的有钱人根本不会在意别人用的手机。不管什么牌子,不管是不是智能机,甚至不管用不用手机,只要开心就好。只有人云亦云,不自信……深耳道式的助听器堵耳怎么办?你好,如果佩戴助听器堵耳,可以让门店验配师调试,适应一段时间后还是堵耳,建议返厂重新制作,可加大通气孔。希望我的回答对你有所帮助。可以先让听力师调试,如果调试还不能解决就……有什么副业可以做,又不影响上班的吗?我来回答一下这个问题吧我做兼职已经有三四年的时间了,收益还不错,不用外出,在家或者利用上班零碎的时间都可以做,下面会给大家截图看收益。1、我做的时间最久是文库,主要几个平……哇这场大雪的五年级作文一觉醒来,拉开窗帘,一束白花花的光射了进来,霎时间刺痛了眼睛,我揉揉惺忪的睡眼,定睛往楼下一瞧,不禁惊叹道:哇,一场大雪!天地间已是一片银装素裹,世界上的一切都仿佛变了样……加入学校广播站申请书导语:申请书是个人或集体向组织、机关、企事业单位或社会团体表述愿望、提出请求时使用的一种文书。申请书的使用范围广泛,申请书也是一种专用书信,它同一般书信一样,也是表情达意的工具……
华为和荣耀的二手机建议购买吗?感谢邀请华为和荣耀的二手机建议购买吗?先来说结论,首选是荣耀V30,因为他是这几款手机中性能最强的。客观一点来说没有什么性能过剩这一说,至少在安卓阵营手机中是不存在的。就……四年级想象作文渔歌子大家好,我是诗人张志和,我写过很多的诗,其中,我最喜爱的就是《渔歌子》。那年春季的时候,我隐居在山间,那座山叫做西塞山。在山前呢,有着一群洁白如雪的白鹭,它们轻轻扇了扇洁……雨让我陶醉E度网专稿未经允许不得转载天上的云一块块聚集起来了,不一会儿,像一块巨大的灰色绸幕遮住了天空,紧接着,一滴,两滴hellip;hellip;可爱的小水珠便一个个从空中急不……网游版号深度观察守望263天的游戏行业,知风起,等风来21世纪经济报道记者蔡姝越,南方财经全媒体记者吴立洋上海、北京报道尊敬的投资者,您好!公司在研产品均尚未获得版号,鉴于项目研发进度、产品发行策略及玩家预期等因素考虑,年报……我的父亲的800字作文1我的父亲泰戈尔说,生命如横越大海,我们都相聚在这小船上。我想告诉你的是,看到那片浅蓝浅蓝天么,让我可以站立在最宽广的博大里,足以从我们所能望见的此端至彼端。……联想智能产品之拯救者游戏手机2Pro,游戏迷的福音此前在联想创新科技大会上,联想展示了ProjectUnity(超级互联方案),能够实现多个屏幕之间的任务协作和管理协同。现在这款应用以超级互联的名称登陆MicrosoftSto……解读丨时隔8个月,版号重新发放对游戏行业意味着什么?21世纪经济报道记者蔡姝越,南方财经全媒体记者吴立洋上海,北京报道在网络游戏版号停发八个月之后,游戏市场终于迎来了令人振奋的好消息。根据国家新闻出版署官网消息,新一……通知关于开展2022(第二十一届)中国互联网大会互联网助力经2022年04月12日14:14各有关单位:中国互联网大会从2002年至今已成功举办二十届,被誉为行业的风向标,网民的嘉年华。2022(第二十一届)中国互联网大会(……并联机器人遭受冷遇,这家公司为何选择逆向而行?记者李京亚编辑即便与串联机器人同属工业机器人领域两大重要品类,并联机器人也一直是声量较小的那一方。串联机器人是一种开式运动链机器人,由一系列连杆通过转动关节或……奶奶的爱500字作文我的奶奶是一名退休教师,我从小是被她带大的。如果说,我以前是一棵小树芽芽儿,在奶奶的精心呵护下,现在,已经长成一棵亭亭玉立的小白杨了。我们和奶奶生活在一起。小的时候,夏天……美丽的大连学生作文三篇大连是个美丽的地方,那里风景优美,物产丰富,海水五光十色,是个可爱的地方。以下是小编整理的美丽的大连学生作文三篇,欢迎阅读!美丽的大连学生作文1人们都说大连的景色美,这个……实用父亲节的作文100字集锦七篇在日常学习、工作或生活中,大家一定都接触过作文吧,借助作文可以提高我们的语言组织能力。一篇什么样的作文才能称之为优秀作文呢?下面是小编精心整理的父亲节的作文100字7篇,欢迎阅……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网