当前位置:首页 > IT技术 > 编程语言 > 正文

线程池-简单粗暴的ScheduleExectorService周期线程池
2021-10-22 10:03:43

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执行下一个任务。其余情况都于此情况相同。任务都是在上一个任务执行完成后,在开始计算时间间隔。

文章简单粗暴的介绍​了周期性线程池的使用、方法、以及常见的问题,希望对大家有用。

本文摘自 :https://blog.51cto.com/w

开通会员,享受整站包年服务立即开通 >