线程池-简单粗暴的ScheduleExectorService周期线程池

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述线程池-简单粗暴的ScheduleExectorService周期线程池相关的知识,希望能为你提供帮助。
【线程池-简单粗暴的ScheduleExectorService周期线程池】1、创建方式
ScheduleExectorService exector = Exector.newScheduledThreadPool(size)


2、方法使用
Schedule(Callback call,long delay,TimeUnit unit)
call : 执行任务
delay:延时时间
unit:延时时间的单位(毫秒、秒、分钟、小时等)


Schedule(Runable run ,long delay,TimeUnit unit)
run :执行任务
delay:延时时间
unit:延时时间的单位


ScheduleAtFixedRate(Runable run,long initialDelay,long period,TimeUnit unit)
run:待执行的任务
initialDelay:间隔时间(间隔多长时间开始执行第一次任务)
period:间隔时间(1、每一次执行任务的间隔时间。2、此时间不能小于或等于0,否则会出现异常IllegalArgumentException)
unit:间隔时间的单位


ScheduleWithFixedDelay(Runable run,long initialDelay,long period,TimeUnit unit)
run:待执行的任务
initialDelay:间隔时间(间隔多长时间开始执行第一次任务)
period:间隔时间(1、每一次执行任务的间隔时间。2、此时间不能小于或等于0,否则会出现异常IllegalArgumentException)
unit:间隔时间的单位


3、其中ScheduleAtFixedRate()和ScheduleWithFixedDelay()的区别和共性:
?共性:功能相同,都是在规定的时间间隔内执行相对应的任务;
如果当前任务未完成执行,不会开启下一个任务,保证相同任务未执行完成情况下不会开启下一个相同的任务
区别:
ScheduleAtFixedRate():任务的执行消耗时间包含在时间间隔中(此处的时间间隔指period),例如:
I、任务的执行时间是7s,时间间隔是3s,此时时间间隔小于任务执行时间,这下一个任务会在7s后当前任务执行完成,接着就会执行下一次的任务,中间不会再有时间间隔;
II、任务的执行时间是2s,时间间隔是3s,此时时间间隔大于任务执行时间,此时下一个任务会在2s后上一个任务执行完成,间隔1s执行下一次的任务;
III、任务的执行时间是3s,时间间隔是3s,此时时间间隔等于任务执行时间,此时下一个任务会在3s后上一个任务执行完成,接着执行下一次的任务,中间同样不会存在时间间隔。
ScheduleWithFixedDelay():任务的执行消耗时间不包含时间间隔(此处的时间间隔指period),例如:
任务的执行时间是7s,时间间隔是3秒,此时时间间隔小于任务执行时间,此时下一个任务会在7s后当前任务执行完成,间隔3s执行下一个任务。其余情况都于此情况相同。任务都是在上一个任务执行完成后,在开始计算时间间隔。
?
文章简单粗暴的介绍?了周期性线程池的使用、方法、以及常见的问题,希望对大家有用。



    推荐阅读