java實(shí)現(xiàn)定時(shí)的方法及實(shí)例代碼-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、普陀網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、普陀網(wǎng)絡(luò)營(yíng)銷、普陀企業(yè)策劃、普陀品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供普陀建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn

java 定時(shí)任務(wù)

在我們編程過(guò)程中如果需要執(zhí)行一些簡(jiǎn)單的定時(shí)任務(wù),無(wú)須做復(fù)雜的控制,我們可以考慮使用JDK中的Timer定時(shí)任務(wù)來(lái)實(shí)現(xiàn)。下面LZ就其原理、實(shí)例以及Timer缺陷三個(gè)方面來(lái)解析Java Timer定時(shí)器。

一、簡(jiǎn)介

在Java中一個(gè)完整定時(shí)任務(wù)需要由Timer、TimerTask兩個(gè)類來(lái)配合完成。 API中是這樣定義他們的,Timer:一種工具,線程用其安排以后在后臺(tái)線程中執(zhí)行的任務(wù)??砂才湃蝿?wù)執(zhí)行一次,或者定期重復(fù)執(zhí)行。由TimerTask:Timer 安排為一次執(zhí)行或重復(fù)執(zhí)行的任務(wù)。我們可以這樣理解Timer是一種定時(shí)器工具,用來(lái)在一個(gè)后臺(tái)線程計(jì)劃執(zhí)行指定任務(wù),而TimerTask一個(gè)抽象類,它的子類代表一個(gè)可以被Timer計(jì)劃的任務(wù)。

Timer類

在工具類Timer中,提供了四個(gè)構(gòu)造方法,每個(gè)構(gòu)造方法都啟動(dòng)了計(jì)時(shí)器線程,同時(shí)Timer類可以保證多個(gè)線程可以共享單個(gè)Timer對(duì)象而無(wú)需進(jìn)行外部同步,所以Timer類是線程安全的。但是由于每一個(gè)Timer對(duì)象對(duì)應(yīng)的是單個(gè)后臺(tái)線程,用于順序執(zhí)行所有的計(jì)時(shí)器任務(wù),一般情況下我們的線程任務(wù)執(zhí)行所消耗的時(shí)間應(yīng)該非常短,但是由于特殊情況導(dǎo)致某個(gè)定時(shí)器任務(wù)執(zhí)行的時(shí)間太長(zhǎng),那么他就會(huì)“獨(dú)占”計(jì)時(shí)器的任務(wù)執(zhí)行線程,其后的所有線程都必須等待它執(zhí)行完,這就會(huì)延遲后續(xù)任務(wù)的執(zhí)行,使這些任務(wù)堆積在一起,具體情況我們后面分析。

當(dāng)程序初始化完成Timer后,定時(shí)任務(wù)就會(huì)按照我們?cè)O(shè)定的時(shí)間去執(zhí)行,Timer提供了schedule方法,該方法有多中重載方式來(lái)適應(yīng)不同的情況,如下:

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, long delay, long period) :安排指定的任務(wù)從指定的延遲后開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行。

同時(shí)也重載了scheduleAtFixedRate方法,scheduleAtFixedRate方法與schedule相同,只不過(guò)他們的側(cè)重點(diǎn)不同,區(qū)別后面分析。

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í)行。

TimerTask

TimerTask類是一個(gè)抽象類,由Timer 安排為一次執(zhí)行或重復(fù)執(zhí)行的任務(wù)。它有一個(gè)抽象方法run()方法,該方法用于執(zhí)行相應(yīng)計(jì)時(shí)器任務(wù)要執(zhí)行的操作。因此每一個(gè)具體的任務(wù)類都必須繼承TimerTask,然后重寫(xiě)run()方法。

另外它還有兩個(gè)非抽象的方法:

boolean cancel():取消此計(jì)時(shí)器任務(wù)。

long scheduledExecutionTime():返回此任務(wù)最近實(shí)際執(zhí)行的安排執(zhí)行時(shí)間。

二、實(shí)例

2.1、指定延遲時(shí)間執(zhí)行定時(shí)任務(wù)

public class TimerTest01 {
 Timer timer;
 public TimerTest01(int time){
  timer = new Timer();
  timer.schedule(new TimerTaskTest01(), time * 1000);
 }
 
 public static void main(String[] args) {
  System.out.println("timer begin....");
  new TimerTest01(3);
 }
}

public class TimerTaskTest01 extends TimerTask{

 public void run() {
  System.out.println("Time's up!!!!");
 }
}

名稱欄目:java實(shí)現(xiàn)定時(shí)的方法及實(shí)例代碼-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article2/degiic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作、網(wǎng)站策劃、虛擬主機(jī)、網(wǎng)站建設(shè)、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司