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