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