日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【java】定时器

發(fā)布時(shí)間:2025/6/17 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【java】定时器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

總結(jié)

1、執(zhí)行計(jì)劃的任務(wù)放在TimerTask的子類中,由Timer進(jìn)行該任務(wù)。

2、創(chuàng)建一個(gè)Timer就是啟動(dòng)一個(gè)新的線程,直至Timer里的任務(wù)執(zhí)行完畢,才會(huì)結(jié)束。希望創(chuàng)建的線程為守護(hù)線程,則創(chuàng)建時(shí)需設(shè)置Timer timer=new Timer(true);

3、執(zhí)行任務(wù)的時(shí)間早于當(dāng)前時(shí)間,任務(wù)會(huì)立即執(zhí)行。

4、TimerTask是以隊(duì)列的方式一個(gè)個(gè)順序執(zhí)行的。當(dāng)前面的任務(wù)消耗時(shí)間較長,則后面的任務(wù)運(yùn)行的時(shí)間也會(huì)延后。

比如,假定Task1執(zhí)行需2s,Task2在Task1開始之后1s需被執(zhí)行。結(jié)果是執(zhí)行完Task1后,立即執(zhí)行Task2。(實(shí)際也符合第3點(diǎn))

5、如果沒有延遲,則執(zhí)行任務(wù)的時(shí)間是上一次任務(wù)開始的時(shí)間加上poried的時(shí)間。如果延遲了,則執(zhí)行任務(wù)的時(shí)間為上一個(gè)任務(wù)的結(jié)束時(shí)間。(補(bǔ)充第4條)

6、方法schedule和scheduleAtFixedRate的區(qū)別在于后者有追趕執(zhí)行性。(下面由代碼解釋)

7、異常方面。如果timer中執(zhí)行任務(wù)時(shí)發(fā)生異常,則結(jié)束該timer線程,不會(huì)在執(zhí)行任何任務(wù)。

?

常用例子

1、示例

import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /*** Created by zay on 2016/12/8.*/public class TimerTest {public static void main(String[] args) {System.out.println("當(dāng)前時(shí)間:"+new Date());//執(zhí)行計(jì)劃的任務(wù)放在TimerTask的子類中,由Timer進(jìn)行該任務(wù)。Timer timer = new Timer();//創(chuàng)建一個(gè)任務(wù),1s后開始執(zhí)行,并此后每隔2s執(zhí)行。timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println(new Date() + "任務(wù)一");}},1000,2000);//創(chuàng)建一個(gè)任務(wù),十天后執(zhí)行。Calendar calendar = Calendar.getInstance();calendar.add(Calendar.DATE,1);Date runDate = calendar.getTime();timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println(new Date() + "任務(wù)二");}},runDate);//timer.cancel(); 調(diào)用TImer的cancel()方法會(huì)清空該TImer的所有任務(wù)。//timerTask.cancel(); 調(diào)用TImerTask的cancel()方法則會(huì)在TImer中取消該任務(wù)。 } }

?2、方法schedule和scheduleAtFixedRate的區(qū)別在于后者有追趕執(zhí)行性。

import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask;/*** Created by zay on 2016/12/8.*/ public class TimerTest {public static void main(String[] args) {System.out.println("當(dāng)前時(shí)間:"+new Date());Calendar calendar=Calendar.getInstance();calendar.add(Calendar.SECOND,-100); //設(shè)置一個(gè)比較早的時(shí)間Date earlyDate = calendar.getTime();Timer timer = new Timer();System.out.printf(new Date() + " 現(xiàn)在開始執(zhí)行任務(wù)");timer.scheduleAtFixedRate(new TimerTask() {@Overridepublic void run() {System.out.println(new Date() + " 任務(wù)一");}},earlyDate,5000);/*timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println(new Date() + " 任務(wù)一");}},earlyDate,5000);*/} }

?

// schedule方法的輸出(注意比對(duì)執(zhí)行任務(wù)的時(shí)間) ? ? ? ? ? ? ? ?//scheduleAtFixedRate方法的輸出

? ? ?

解釋:當(dāng)執(zhí)行任務(wù)的時(shí)間早于當(dāng)前時(shí)間時(shí),比如示例中,執(zhí)行任務(wù)的時(shí)間早于當(dāng)前任務(wù)100s,那么這段時(shí)間理論應(yīng)該有的任務(wù)怎么處理呢?

schedule選擇拋棄不理,以當(dāng)前的時(shí)間為新的起點(diǎn),而scheduleAtFiexdRate則會(huì)一口氣將這些任務(wù)順序都執(zhí)行完畢。

?

轉(zhuǎn)載于:https://www.cnblogs.com/zadomn0920/p/java.html

總結(jié)

以上是生活随笔為你收集整理的【java】定时器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。