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

Java定时任务之ScheduledThreadPoolEx

  ScheduledThreadPoolExecutor是JDK5提供的可执行定时任务的一个工具类,可以在多线程环境下延迟执行任务或者定期执行任务;和Timer类似,它也提供了三种定时模式:延迟执行任务固定延迟的定期执行(fixeddelay)按照固定的周期执行(fixedrate)延迟执行任务
  任务将按照给定的时间延迟delay后开始执行;对应的方法如下:schedule(Runnablecommand,longdelay,TimeUnitunit)schedule(CallableVcallable,longdelay,TimeUnitunit)
  下面我们通过一个例子检验下结果是否正确:ScheduledExecutorServiceexecutorExecutors。newSingleThreadScheduledExecutor();PrintUtil。print(startscheduleatask。);executor。schedule(newRunnable(){Overridepublicvoidrun(){PrintUtil。print(taskisrunning。);}},5,TimeUnit。SECONDS);
  我们计划了一个5秒钟后执行的任务,通过打印结果可以看到确实按照给定时间执行了:15:44:07startscheduleatask。15:44:12taskisrunning。固定延迟的定期执行
  任务第一次按照给定的初始延迟initialDelay执行,后续每一次执行的时间为上一次任务的结束时间加上给定的period后执行;对应的方法如下:scheduleAtFixedRate(Runnablecommand,longinitialDelay,longperiod,TimeUnitunit)
  同样我们通过一个例子检验下结果是否正确:ScheduledExecutorServiceexecutorExecutors。newSingleThreadScheduledExecutor();PrintUtil。print(startscheduleatask。);executor。scheduleWithFixedDelay(newRunnable(){Overridepublicvoidrun(){PrintUtil。print(taskisrunning。);try{Thread。sleep(2000);}catch(InterruptedExceptione){e。printStackTrace();}}},0,5,TimeUnit。SECONDS);
  我们计划了一个定期(每5秒钟)延迟执行的任务,第一次任务立即执行,每次任务执行时长2秒钟,通过打印的日志我们可以看到每次任务开始执行的时间为:上次任务结束时间5秒钟:15:55:16startscheduleatask。15:55:16taskisrunning。15:55:18taskisfinished。15:55:23taskisrunning。15:55:25taskisfinished。15:55:30taskisrunning。15:55:32taskisfinished。按照固定的周期执行
  任务第一次按照给定的初始延迟initialDelay执行,后续每一次执行的时间为固定的时间间隔period,如果线程池中工作线程不够则任务顺延执行;对应的方法如下:scheduleWithFixedDelay(Runnablecommand,longinitialDelay,longperiod,TimeUnitunit)
  同样我们通过一个例子检验下结果是否正确:ScheduledExecutorServiceexecutorExecutors。newScheduledThreadPool(10);PrintUtil。print(startscheduleatask。);executor。scheduleAtFixedRate(newRunnable(){Overridepublicvoidrun(){PrintUtil。print(taskisrunning。);try{Thread。sleep(2000);}catch(InterruptedExceptione){e。printStackTrace();}PrintUtil。print(taskisfinished。);}},0,5,TimeUnit。SECONDS);
  我们创建了一个核心线程池为10的ScheduledThreadPoolExecutor,并计划了一个定期(每5秒钟)执行一次的任务,过打印的日志我们可以看到每次任务开始执行的时间为:上次任务开始时间5秒钟:16:02:43startscheduleatask。16:02:43taskisrunning。16:02:45taskisfinished。16:02:48taskisrunning。16:02:50taskisfinished。
  上面的例子都是计划了一个任务,如果是有多个定时任务同时执行会怎么样呢?
  如果线程足够并且CPU资源足够,那就会同时执行,如果线程或者CPU资源不够那只能排队执行了。有兴趣的话可以克隆文末的测试代码,里面提供了一些测试的例子。底层原理
  ScheduledThreadPoolExecutor是如何保证我们计划的任务都是按照正确的时间点执行的呢?
  其内部实现了一个阻塞队列DelayedWorkQueue,所有的任务都会放到这个队列里。这个阻塞队列内部通过一个数组来保存这些任务,并且基于最小堆排序,按照每个任务的下次执行时间进行排序,这样就保证了执行线程拿到的这个队列中的第一个元素就是最接近当前时间执行的任务了。
  相关的源码如下:保存定时任务的队列privateRunnableScheduledFuturelt;?〔〕queuenewRunnableScheduledFuturelt;?〔INITIALCAPACITY〕;最小堆排序相关的方法privatevoidsiftUp(intk,RunnableScheduledFuturelt;?key)privatevoidsiftDown(intk,RunnableScheduledFuturelt;?key)
  那时间上是如何保证的呢?
  DelayedWorkQueue重写了take和poll方法,利用了AQS的ConditionObject机制使当前线程休眠,等时间到了再唤醒线程去拿第一个任务。
  关于AQS和ConditonObject的介绍,可以参考下文末的链接。publicRunnableScheduledFuturelt;?take()throwsInterruptedException{finalReentrantLocklockthis。lock;lock。lockInterruptibly();try{for(;;){RunnableScheduledFuturelt;?firstqueue〔0〕;if(firstnull)available。await();else{longdelayfirst。getDelay(NANOSECONDS);if(delay0)returnfinishPoll(first);firstnull;dontretainrefwhilewaitingif(leader!null)available。await();else{ThreadthisThreadThread。currentThread();leaderthisThread;try{available。awaitNanos(delay);}finally{if(leaderthisThread)leadernull;}}}}}finally{if(leadernullqueue〔0〕!null)available。signal();lock。unlock();}}优点
  作为对JDK1。3推出的Timer的替代,ScheduledThreadPoolExecutor有如下优点:它支持多个定时任务同时执行,而Timer是单线程执行的它通过System。nanoTime()保证了任务执行时间不受操作系统时间变化的影响一个定时任务抛出异常,其他定时任务不受影响,而Timer却不支持这一点Demo代码
  srcmainjavanetweichitechutilScheduledThreadPoolExecutorDemo。java小西学编程javalearningGitee。com参考文章
  Java定时任务之Timer原理解析
  JAVA并发之ReentrantLock原理解析

为什么现在是购买新能源汽车的最佳时机目前新能源汽车市场占有率节节高升,在部分城市,市场占有率已超过20,新能源汽车已经不再有骗补、PPT等标签,很多消费者考虑性能、经济性、政策,都会选择体验新能源汽车。以下会简单……回顾2021丨互联网年度三大关键词反垄断个人信息保护与互联互即将过去的2021年对于互联网行业来讲相当漫长。这一年里,有两家互联网大型平台公司因垄断问题被开出天价罚单,《个人信息保护法》正式出台实施,互联网平台互联互通正在稳步推进。以上……关于手机的作文爸爸的手机我爸爸的手机是名牌的,大概是2009年买的,它是爸爸最亲最亲的宝贝呀!爸爸的手机是黑色的,形状是长方形的,机子的前面有一个大屏幕,里面的图片是小汽车的图片,它的侧面有一个……糖果国去打汽水国小学生作文300字一天,糖果国的国王说他自己喜欢喝汽水,大臣们就提议:我们的邻居汽水国有很多瓶汽水,(都能排成一条长河了),我们直接去抢不就行了吗?每一个糖果国的。老百姓都说这个方法不好,可是国……2020那一刻我长大了作文8篇不知不觉,随着时间,我们一天天的成长着。以下是小编为您整理的2020那一刻我长大了作文,欢迎阅读!2020那一刻我长大了作文1坐在窗边,静静地聆听着窗外的雨声,懵懂的我已……秋天的田野作文范文400字秋天是一个五彩缤纷的秋天,秋姑娘让地上的生物穿上了五颜绿色的礼服,让它们去参加它的晚宴。有火红的高梁,好象一把把火焰。有绿色的甘蔗、金黄色的稻谷。一阵风拂过,就好象海浪在……java基础知识11、List,Set,Map是否继承自Collection接口?存取元素时,有何差异?List,Set是继承Collection接口,Map不是。List:元素有放入顺序,元素……我的烦恼小学作文600字四篇在日常生活或是工作学习中,大家都写过作文吧,作文是由文字组成,经过人的思想考虑,通过语言组织来表达一个主题意义的文体。那么问题来了,到底应如何写一篇优秀的作文呢?以下是小编为大……描写小鲤鱼的小学作文400字我家养了两条小鲤鱼,一条是桔黄色的,鳍上点缀着细微的乳白色,另一条全身火红,在水底犹如一块红色的鹅卵石。它们就像一对朝夕相处的好朋友,每天不离左右。小鲤鱼在我家住了一段时……看春节联欢会作文除夕之夜,守在电视机旁边看春节晚会已然成为现在每个家庭的习俗了。接下来小编搜集了看春节联欢会作文,仅供大家参考,希望帮助到大家。篇一:看春节联欢会作文寒假就像流水般匆匆而……谁能通俗解释下,国资入股蚂蚁集团,代表着什么?防止资本野蛮生长,加强资本控制与导向,避免大而不能倒。第一、它的本身主要是金融公司,在有关钱财的方面,是一直会被监管的。第二、蚂蚁集团的发展已经开始不利于市场的稳定……余额宝安全吗?你们都存了多少?感谢邀请,更感谢楼主的提问。楼主你好,余额宝安全吗?你们都存了多少钱呢?余额宝实际上已经问世很多年了,但是我个人使用的经验来谈这个问题,我觉得是非常安全的,而且支付宝他拥……
钢琴练习日记手机录视频时内录电钢琴声音,戴耳机弹琴不扰民2020年4月买电钢琴到现在满两年了,两年来一直仅仅使用了其中几种功能:一是用电钢琴自带的三角钢琴音色,学习弹钢琴,练习基本功,学弹钢琴曲:二是使用电钢琴自带的电子节拍器,跟节……夏雨雨的作文400字汇编5篇在日常学习、工作抑或是生活中,大家都尝试过写作文吧,借助作文可以宣泄心中的情感,调节自己的心情。为了让您在写作文时更加简单方便,下面是小编整理的夏雨雨的作文400字5篇,欢迎阅……五年级想象作文吹泡泡的遐想401班袁添每天过着同样的生活,有什么意义。我自言自语地说。我把头伸出窗外,眯着眼睛感受着阳光,尽量让自己想快乐的事。我看着蓝蓝的天,总觉得缺少了什么。对,缺少那些五颜六色的泡……追逐亮剑精神成长日记一名剑客在一个狭小的巷子里遇到了天下第一剑客,这时他该怎么做呢?是俯首称臣让到一旁,还是亮出宝剑准备做最后一搏?我认为,他应该亮出宝剑做最后的搏斗。逢敌必亮剑!这句话出自……美在身边小学优秀作文每个星期天的。晚上,爸爸都会带我去文二路的博库书城去看两小时的书。有一次,我看完书和爸爸下楼来推车,我看见一个盲人坐在地上认真地拉着二胡,同时也向人们索取着。看到这情景,……5G将不可避免地颠覆传媒和娱乐产业前景?来源综艺、光明日报、广电猎酷、纪实观察、流媒体网、媒介360等在未来万物互联的时代,5G到底会对媒体及娱乐行业产生怎样颠覆式的影响?本文带你了解。5G风暴,即将来临……实用的描写小学生开学的作文400字6篇在学习、工作乃至生活中,大家都不可避免地要接触到作文吧,作文是经过人的思想考虑和语言组织,通过文字来表达一个主题意义的记叙方法。那么一般作文是怎么写的呢?下面是小编整理的描写小……自信带给我微笑作文范文自信是一副眼镜,戴上它你就会看到自己胜利时的美景;胜利是一幅助听器,戴上它你就会听到属于自己的胜利的凯歌。多少年来自信都是无数人们的好朋友,而说起我和自信的故事那还真有趣呢!……又是一夜平安夜作文400字冬天是我最喜欢的季节,因为它不仅有皑皑白雪,还有我再喜欢的几个节日圣诞节、元旦,今天,又是我十分期盼的日子,圣诞前夕平安夜。小时候,我最喜欢的日子不是12月25日,而是1……补习风波五年级作文周六我还在甜美的睡梦中,突然雷声阵阵响起:‘起床了’,‘起床了’!已经七点半你怎么还睡在床上?八点的写作课你要迟到了。我一下被惊醒,睡眼朦胧的看着母亲,母亲正瞪着大眼对我说‘快……动物园游记的作文导语:不一会儿,在我们的谈笑声中到了动物园。下面是小编整理的一些关于动物园的优秀作文,欢迎查阅,谢谢!篇一:游动物园本以为到了动物园,看到了动物,我就会开心。没想到眼里却……一科技公司小红书上发布虚假种草笔记!被罚8万元小红书医美项目500粉,图文直发10元!因帮他人刷单炒信,通州一科技公司被罚款8万元。近日,通州区市场监管局查处首起帮助其他经营者网络刷单炒信的经济违法案件。今年1……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网