當前位置:首頁 > IT技術(shù) > 編程語言 > 正文

線程池-簡單粗暴的ScheduleExectorService周期線程池
2021-10-22 10:03:43

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

開通會員,享受整站包年服務立即開通 >