當(dāng)前位置:首頁 > 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í)行任務(wù)

delay:延時(shí)時(shí)間

unit:延時(shí)時(shí)間的單位(毫秒、秒、分鐘、小時(shí)等)


Schedule(Runable run ,long delay,TimeUnit unit)

run :執(zhí)行任務(wù)

delay:延時(shí)時(shí)間

unit:延時(shí)時(shí)間的單位


ScheduleAtFixedRate(Runable run,long initialDelay,long period,TimeUnit unit)

run:待執(zhí)行的任務(wù)

initialDelay:間隔時(shí)間(間隔多長時(shí)間開始執(zhí)行第一次任務(wù))

period:間隔時(shí)間(1、每一次執(zhí)行任務(wù)的間隔時(shí)間。2、此時(shí)間不能小于或等于0,否則會出現(xiàn)異常IllegalArgumentException)

unit:間隔時(shí)間的單位


ScheduleWithFixedDelay(Runable run,long initialDelay,long period,TimeUnit unit)

run:待執(zhí)行的任務(wù)

initialDelay:間隔時(shí)間(間隔多長時(shí)間開始執(zhí)行第一次任務(wù))

period:間隔時(shí)間(1、每一次執(zhí)行任務(wù)的間隔時(shí)間。2、此時(shí)間不能小于或等于0,否則會出現(xiàn)異常IllegalArgumentException)

unit:間隔時(shí)間的單位


3、其中ScheduleAtFixedRate()和ScheduleWithFixedDelay()的區(qū)別和共性:

?共性:

功能相同,都是在規(guī)定的時(shí)間間隔內(nèi)執(zhí)行相對應(yīng)的任務(wù);

如果當(dāng)前任務(wù)未完成執(zhí)行,不會開啟下一個(gè)任務(wù),保證相同任務(wù)未執(zhí)行完成情況下不會開啟下一個(gè)相同的任務(wù)

區(qū)別:

ScheduleAtFixedRate():任務(wù)的執(zhí)行消耗時(shí)間包含在時(shí)間間隔中(此處的時(shí)間間隔指period),例如:

I、任務(wù)的執(zhí)行時(shí)間是7s,時(shí)間間隔是3s,此時(shí)時(shí)間間隔小于任務(wù)執(zhí)行時(shí)間,這下一個(gè)任務(wù)會在7s后當(dāng)前任務(wù)執(zhí)行完成,接著就會執(zhí)行下一次的任務(wù),中間不會再有時(shí)間間隔;

II、任務(wù)的執(zhí)行時(shí)間是2s,時(shí)間間隔是3s,此時(shí)時(shí)間間隔大于任務(wù)執(zhí)行時(shí)間,此時(shí)下一個(gè)任務(wù)會在2s后上一個(gè)任務(wù)執(zhí)行完成,間隔1s執(zhí)行下一次的任務(wù);

III、任務(wù)的執(zhí)行時(shí)間是3s,時(shí)間間隔是3s,此時(shí)時(shí)間間隔等于任務(wù)執(zhí)行時(shí)間,此時(shí)下一個(gè)任務(wù)會在3s后上一個(gè)任務(wù)執(zhí)行完成,接著執(zhí)行下一次的任務(wù),中間同樣不會存在時(shí)間間隔。

ScheduleWithFixedDelay():任務(wù)的執(zhí)行消耗時(shí)間不包含時(shí)間間隔(此處的時(shí)間間隔指period),例如:

任務(wù)的執(zhí)行時(shí)間是7s,時(shí)間間隔是3秒,此時(shí)時(shí)間間隔小于任務(wù)執(zhí)行時(shí)間,此時(shí)下一個(gè)任務(wù)會在7s后當(dāng)前任務(wù)執(zhí)行完成,間隔3s執(zhí)行下一個(gè)任務(wù)。其余情況都于此情況相同。任務(wù)都是在上一個(gè)任務(wù)執(zhí)行完成后,在開始計(jì)算時(shí)間間隔。

?

文章簡單粗暴的介紹?了周期性線程池的使用、方法、以及常見的問題,希望對大家有用。

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

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