1、創(chuàng)建方式
ScheduleExectorService exector = Exector.newScheduledThreadPool(size)
2、方法使用
Schedule(Callback call,long delay,TimeUnit unit)
call : 執(zhí)行任務
delay:延時時間
unit:延時時間的單位(毫秒、秒、分鐘、小時等)
Schedule(Runable run ,long delay,TimeUnit unit)
run :執(zhí)行任務
delay:延時時間
unit:延時時間的單位
ScheduleAtFixedRate(Runable run,long initialDelay,long period,TimeUnit unit)
run:待執(zhí)行的任務
initialDelay:間隔時間(間隔多長時間開始執(zhí)行第一次任務)
period:間隔時間(1、每一次執(zhí)行任務的間隔時間。2、此時間不能小于或等于0,否則會出現(xiàn)異常IllegalArgumentException)
unit:間隔時間的單位
ScheduleWithFixedDelay(Runable run,long initialDelay,long period,TimeUnit unit)
run:待執(zhí)行的任務
initialDelay:間隔時間(間隔多長時間開始執(zhí)行第一次任務)
period:間隔時間(1、每一次執(zhí)行任務的間隔時間。2、此時間不能小于或等于0,否則會出現(xiàn)異常IllegalArgumentException)
unit:間隔時間的單位
3、其中ScheduleAtFixedRate()和ScheduleWithFixedDelay()的區(qū)別和共性:
?共性: 功能相同,都是在規(guī)定的時間間隔內(nèi)執(zhí)行相對應的任務; 如果當前任務未完成執(zhí)行,不會開啟下一個任務,保證相同任務未執(zhí)行完成情況下不會開啟下一個相同的任務 區(qū)別: ScheduleAtFixedRate():任務的執(zhí)行消耗時間包含在時間間隔中(此處的時間間隔指period),例如: I、任務的執(zhí)行時間是7s,時間間隔是3s,此時時間間隔小于任務執(zhí)行時間,這下一個任務會在7s后當前任務執(zhí)行完成,接著就會執(zhí)行下一次的任務,中間不會再有時間間隔; II、任務的執(zhí)行時間是2s,時間間隔是3s,此時時間間隔大于任務執(zhí)行時間,此時下一個任務會在2s后上一個任務執(zhí)行完成,間隔1s執(zhí)行下一次的任務; III、任務的執(zhí)行時間是3s,時間間隔是3s,此時時間間隔等于任務執(zhí)行時間,此時下一個任務會在3s后上一個任務執(zhí)行完成,接著執(zhí)行下一次的任務,中間同樣不會存在時間間隔。 ScheduleWithFixedDelay():任務的執(zhí)行消耗時間不包含時間間隔(此處的時間間隔指period),例如: 任務的執(zhí)行時間是7s,時間間隔是3秒,此時時間間隔小于任務執(zhí)行時間,此時下一個任務會在7s后當前任務執(zhí)行完成,間隔3s執(zhí)行下一個任務。其余情況都于此情況相同。任務都是在上一個任務執(zhí)行完成后,在開始計算時間間隔。 ? 文章簡單粗暴的介紹?了周期性線程池的使用、方法、以及常見的問題,希望對大家有用。
本文摘自 :https://blog.51cto.com/w