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是自己寫(xiě)的一個(gè)類(lèi),只有兩個(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í)有所幫助,也希望大家多多支持腳本之家。
- Java循環(huán)隊(duì)列原理與用法詳解
- 幾道java循環(huán)練習(xí)題(適合新人)
- java循環(huán)練習(xí)的簡(jiǎn)單代碼實(shí)例
- java中用數(shù)組實(shí)現(xiàn)環(huán)形隊(duì)列的示例代碼
- Java基礎(chǔ)之?dāng)?shù)組詳解
- 使用java一維數(shù)組模擬壓棧彈棧
- Java 自定義動(dòng)態(tài)數(shù)組方式
- java 定義長(zhǎng)度為0的數(shù)組/空數(shù)組案例
- java二維數(shù)組指定不同長(zhǎng)度實(shí)例方法
- Java基礎(chǔ)之?dāng)?shù)組模擬循環(huán)隊(duì)列
相關(guān)文章
java使用@Scheduled注解執(zhí)行定時(shí)任務(wù)
這篇文章主要給大家介紹了關(guān)于java使用@Scheduled注解執(zhí)行定時(shí)任務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案
這篇文章主要介紹了java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java實(shí)現(xiàn)數(shù)字轉(zhuǎn)成英文的方法
這篇文章主要介紹了Java實(shí)現(xiàn)數(shù)字轉(zhuǎn)成英文的方法,涉及java數(shù)組與字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05springcloud-feign調(diào)用報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了springcloud-feign調(diào)用報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08