Java循環(huán)調(diào)用多個(gè)timer實(shí)現(xiàn)定時(shí)任務(wù)
通常在使用java實(shí)現(xiàn)定時(shí)任務(wù)時(shí),有兩種方法,一種是spring中的schedule(cron = ' */5 * * * ?'),另一種就是java中的timer,
timer+TimerTask配合實(shí)現(xiàn),這里附上Timer對(duì)象的一些常用api
Timer() 創(chuàng)建-個(gè)新計(jì)時(shí)器。Timer(boolean isDaemon) 創(chuàng)建一個(gè)新計(jì)時(shí)器, 可以指定其相關(guān)的線程作為守護(hù)程序運(yùn)行。Timer(String, name) 創(chuàng)建一個(gè)新計(jì)時(shí)器,其相關(guān)的線程具有指定的名稱。Timer(String, name, boolean isDaemon) 創(chuàng)建一個(gè)新計(jì)時(shí)器, 可以指定其相關(guān)的線程作為守護(hù)程序運(yùn)行。cancel() 終止此計(jì)時(shí)器,丟棄所有當(dāng)前已安排的任務(wù)。.purge () 從此計(jì)時(shí)器的任務(wù)隊(duì)列中移除所有己取消的任務(wù)。schedule(TimerTask, task, Date time) 安排在指定的時(shí)間執(zhí)行指定的任務(wù)。schedule (TimerTask task, Date firstTime, long period) 安排指定的任務(wù)在指定的時(shí)間開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行。schedule (TimerTask task, long, delay) 安排在指定延遲后執(zhí)行指定的任務(wù)。schedule (TimerTask task, 1ong. delay, long period) 安排指定的任務(wù)從指定的延遲后開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行。scheduleAtFixedRate (TimerTask task,Date firstTime, long period) 安排指定的任務(wù)在指定的時(shí)間開(kāi)始進(jìn)行重復(fù)的固定速率執(zhí)行。scheduleAtFixedRate (TimerTask task, long delay, long period) 安排指定的任務(wù)在指定的延遲后開(kāi)始進(jìn)行重復(fù)的固定速率執(zhí)行。
下面列舉一個(gè)循環(huán)創(chuàng)建TimerTask的實(shí)例:
public static void main(String[] args) throws ParseException { ArrayList<TimeClass> list = new ArrayList<>(); //TimeClass是自己寫的一個(gè)類,只有兩個(gè)字段,private String startTime和private String endTime; list.add(new TimeClass('2020-07-23 20:08:00 ','2020-07-23 20:08:15')); list.add(new TimeClass('2020-07-23 20:08:30 ','2020-07-23 20:08:00')); DateFormat df = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss'); //一個(gè)對(duì)象,在指定的開(kāi)始時(shí)間和結(jié)束時(shí)間,分別進(jìn)行不同的操作,如商品的定時(shí)上架、下架。 Timer timer = new Timer(); for(int i = 0; i < list.size(); i++){ Date startTime = df.parse(list.get(i).getStartTime()); Date endTime = df.parse(list.get(i).getEndTime()); int a=i; timer.schedule(new TimerTask() { //新建一個(gè)定時(shí)任務(wù) @Override public void run() { System.out.println('任務(wù)開(kāi)始了'+a); } },startTime); timer.schedule(new TimerTask() { @Override public void run() { System.out.println('任務(wù)結(jié)束了'+a); } },endTime); } //timer的過(guò)程中不會(huì)阻塞,不影響下面代碼的執(zhí)行 for (int i=0;i<=20;i++) { System.out.println('=====' + i); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. JSP的Cookie在登錄中的使用2. asp(vbscript)中自定義函數(shù)的默認(rèn)參數(shù)實(shí)現(xiàn)代碼3. HTML5 Canvas繪制圖形從入門到精通4. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁(yè)的方法5. 利用CSS3新特性創(chuàng)建透明邊框三角6. ASP基礎(chǔ)知識(shí)VBScript基本元素講解7. 詳解CSS偽元素的妙用單標(biāo)簽之美8. XHTML 1.0:標(biāo)記新的開(kāi)端9. php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究10. XML入門的常見(jiàn)問(wèn)題(四)
