專利名稱:計(jì)劃調(diào)度定時(shí)任務(wù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通訊領(lǐng)域,尤其涉及一種計(jì)劃調(diào)度定時(shí)任務(wù)的方法。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,計(jì)劃調(diào)度任務(wù)的需求越來(lái)越廣泛,如,企業(yè)需要計(jì)劃調(diào)度每目的目志或者晚間批處理過(guò)程;用戶需要根據(jù)約定計(jì)劃調(diào)度鬧鈴時(shí)間,等等。
與本發(fā)明相關(guān)的現(xiàn)有技術(shù)一,是基于Java應(yīng)用程序?qū)崿F(xiàn)任務(wù)的計(jì)劃調(diào)度的技術(shù)方案,在該方案中引入了定時(shí)器框架,使用該定時(shí)器框架能夠使程序員比較容易地計(jì)劃簡(jiǎn)單的任務(wù)。在所述Java定時(shí)器框架中使用一個(gè)隊(duì)列存放所有定時(shí)任務(wù),使用一個(gè)后臺(tái)線程完成所有任務(wù)的調(diào)度與執(zhí)行。其處理流程如圖1所示,包括步驟S101、主線程注冊(cè)定時(shí)任務(wù),指定開(kāi)始時(shí)間,時(shí)間間隔;步驟S102、將后臺(tái)線程從等待狀態(tài)喚醒,之后結(jié)束主線程;當(dāng)所述后臺(tái)線程從等待狀態(tài)被喚醒后,其執(zhí)行步驟S103,即所述后臺(tái)線程從任務(wù)隊(duì)列中取出一個(gè)執(zhí)行時(shí)間最早的定時(shí)任務(wù);步驟S104、所述后臺(tái)線程判斷所述取出的定時(shí)任務(wù)的執(zhí)行時(shí)間是否大于所述當(dāng)前時(shí)間,若是,則執(zhí)行步驟S105,即等待,等待時(shí)間為執(zhí)行時(shí)間減去當(dāng)前時(shí)間,然后轉(zhuǎn)入步驟S103;否則,執(zhí)行步驟S106,即執(zhí)行所述定時(shí)任務(wù);然后執(zhí)行步驟S107;步驟S107、判斷所述取出的定時(shí)任務(wù)是否需要重復(fù)執(zhí)行,若需要重復(fù)執(zhí)行,則執(zhí)行步驟S108,即修改所述定時(shí)任務(wù)的執(zhí)行時(shí)間,即將當(dāng)前執(zhí)行時(shí)間加上設(shè)定的時(shí)間間隔,然后用修改后的執(zhí)行時(shí)間更新所述定時(shí)任務(wù)的執(zhí)行時(shí)間,然后轉(zhuǎn)入步驟S103;如果不需要重復(fù)執(zhí)行,即確認(rèn)所述定時(shí)任務(wù)為單次任務(wù)時(shí),則執(zhí)行步驟S109,即將所述單次定時(shí)任務(wù)從任務(wù)隊(duì)列中刪除,然后轉(zhuǎn)入步驟S103。
由現(xiàn)有技術(shù)的技術(shù)方案可以看出,由于現(xiàn)有技術(shù)通過(guò)指定一個(gè)固定的執(zhí)行時(shí)間間隔來(lái)實(shí)現(xiàn)重復(fù)執(zhí)行的定時(shí)任務(wù),因而其存在如下缺陷1、無(wú)法實(shí)現(xiàn)任意復(fù)雜的定時(shí)任務(wù)的計(jì)劃調(diào)度,缺乏靈活性;2、即使對(duì)每天同一時(shí)刻執(zhí)行的任務(wù),也會(huì)因?yàn)樵谙牧顣r(shí)開(kāi)始和結(jié)束時(shí)出現(xiàn)時(shí)間跳躍;3、當(dāng)中途進(jìn)行系統(tǒng)時(shí)間修正時(shí),定時(shí)器無(wú)法感知,仍按照修正前的時(shí)間進(jìn)行調(diào)度;4、使用單一的后臺(tái)線程調(diào)度并執(zhí)行所有定時(shí)任務(wù),處理能力弱,當(dāng)執(zhí)行某個(gè)任務(wù)耗費(fèi)時(shí)間比較多時(shí),容易產(chǎn)生時(shí)間漂移,即容易延遲其它任務(wù)的執(zhí)行;5、支持的定時(shí)任務(wù)數(shù)目少。
發(fā)明內(nèi)容
鑒于上述現(xiàn)有技術(shù)所存在的問(wèn)題,本發(fā)明的目的是提供一種計(jì)劃調(diào)度定時(shí)任務(wù)的方法,通過(guò)該方法,能夠支持任意復(fù)雜的計(jì)劃調(diào)度,如每天同一時(shí)刻執(zhí)行任務(wù)、每周某幾天同一時(shí)刻執(zhí)行任務(wù)、每月某幾天同一時(shí)刻執(zhí)行任務(wù)等等,因而比較靈活;通過(guò)該方法,當(dāng)使用日歷時(shí),從而屏蔽了夏令時(shí)的影響;當(dāng)中途進(jìn)行系統(tǒng)時(shí)間修正時(shí),下一次的調(diào)度能夠按照修正后的系統(tǒng)時(shí)間進(jìn)行;通過(guò)該方法引入的線程池技術(shù),能夠并發(fā)處理定時(shí)任務(wù),一方面提高了處理能力,另一方面不會(huì)延遲其他任務(wù)的執(zhí)行;而且本發(fā)明能夠支持更多數(shù)量的定時(shí)任務(wù)。
本發(fā)明的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的本發(fā)明提供的一種計(jì)劃調(diào)度定時(shí)任務(wù)的方法,包括A、基于定時(shí)迭代器,通過(guò)至少兩個(gè)線程調(diào)度并執(zhí)行計(jì)劃調(diào)度的定時(shí)任務(wù)。
其中,所述步驟A具體包括A1、后臺(tái)線程從任務(wù)隊(duì)列中獲取執(zhí)行時(shí)間最早的定時(shí)任務(wù);A2、判斷所述獲取的定時(shí)任務(wù)的執(zhí)行時(shí)間是否大于當(dāng)前時(shí)間,若大于,則所述線程進(jìn)入等待狀態(tài),當(dāng)?shù)却龝r(shí)間到時(shí),執(zhí)行步驟A3;否則直接執(zhí)行步驟A3;A3、判斷是否能夠獲取到所述定時(shí)任務(wù)的下次執(zhí)行時(shí)間,若是,則從所述定時(shí)迭代器中獲取所述定時(shí)任務(wù)的下次執(zhí)行時(shí)間,并根據(jù)所述獲取的下次執(zhí)行時(shí)間更新所述定時(shí)任務(wù)的執(zhí)行時(shí)間,然后執(zhí)行步驟A4;否則,刪除任務(wù)隊(duì)列中的所述定時(shí)任務(wù),然后執(zhí)行步驟A4;A4、喚醒線程池中的后臺(tái)線程,并執(zhí)行所述獲取的定時(shí)任務(wù),然后轉(zhuǎn)入步驟A1。
其中,在所述步驟A1之前包括A5、主線程指定定時(shí)迭代器,并將計(jì)劃調(diào)度的定時(shí)任務(wù)放入任務(wù)隊(duì)列中,然后喚醒線程池中的后臺(tái)線程;A6、所述線程池中的后臺(tái)線程通過(guò)競(jìng)爭(zhēng),只有一個(gè)后臺(tái)線程獲取調(diào)度定時(shí)任務(wù)的權(quán)利。
其中,所述步驟A1具體包括A11、后臺(tái)線程判斷所述任務(wù)隊(duì)列是否為空,當(dāng)確認(rèn)所述任務(wù)隊(duì)列不為空時(shí),則執(zhí)行步驟A12;否則,繼續(xù)執(zhí)行步驟A11;A12、從所述任務(wù)隊(duì)列中獲取執(zhí)行時(shí)間最早的定時(shí)任務(wù)。
其中,所述步驟A4還包括所述被喚醒的后臺(tái)線程通過(guò)競(jìng)爭(zhēng),只有一個(gè)后臺(tái)線程獲取調(diào)度定時(shí)任務(wù)的權(quán)利,然后轉(zhuǎn)入步驟A1。
其中,所述步驟A具體包括A7、所述主線程根據(jù)注冊(cè)的定時(shí)任務(wù),從所述指定的定時(shí)迭代器中獲取所述定時(shí)任務(wù)的執(zhí)行時(shí)間,并根據(jù)所述獲取的執(zhí)行時(shí)間在定時(shí)器框架中注冊(cè)單次執(zhí)行的任務(wù);A8、定時(shí)觸發(fā)所述定時(shí)框架,將其內(nèi)所述注冊(cè)的單次執(zhí)行的定時(shí)任務(wù)放入后臺(tái)線程池的任務(wù)隊(duì)列中,由所述后臺(tái)線程對(duì)所述放入任務(wù)隊(duì)列中的定時(shí)任務(wù)進(jìn)行處理;A9、當(dāng)從定時(shí)迭代器中獲取到所述定時(shí)任務(wù)的下一次執(zhí)行時(shí)間時(shí),根據(jù)所述獲取的下一次執(zhí)行時(shí)間向所述定時(shí)框架中注冊(cè)單次執(zhí)行的任務(wù)。
其中,在所述步驟A7之前包括A10、主線程注冊(cè)定時(shí)任務(wù),并指定定時(shí)迭代器。
其中,步驟A8中所述后臺(tái)線程對(duì)所述放入任務(wù)隊(duì)列中的定時(shí)任務(wù)進(jìn)行處理的過(guò)程具體包括A81、通過(guò)所述后臺(tái)線程池中的線程的競(jìng)爭(zhēng),只有一個(gè)后臺(tái)線程獲取調(diào)度定時(shí)任務(wù)的權(quán)利;A82、所述獲取調(diào)度定時(shí)任務(wù)的權(quán)利的后臺(tái)線程,調(diào)度并執(zhí)行所述放入任務(wù)隊(duì)列中的定時(shí)任務(wù),當(dāng)執(zhí)行完畢后,刪除所述定時(shí)任務(wù)。
其中,所述步驟A9具體包括A91、判斷是否能夠從定時(shí)迭代器中獲取到所述定時(shí)任務(wù)的下一次執(zhí)行時(shí)間,若是,則根據(jù)所述獲取的下一次執(zhí)行時(shí)間向所述定時(shí)框架中注冊(cè)單次執(zhí)行的任務(wù);否則,結(jié)束此步驟。
由上述本發(fā)明提供的技術(shù)方案可以看出,本發(fā)明所述的方法基于定時(shí)迭代器,通過(guò)至少兩個(gè)線程調(diào)度并執(zhí)行計(jì)劃調(diào)度的定時(shí)任務(wù)。通過(guò)本發(fā)明將計(jì)劃以定時(shí)迭代器的方式獨(dú)立出來(lái),便于實(shí)現(xiàn)任意復(fù)雜的計(jì)劃;而且在實(shí)現(xiàn)定時(shí)達(dá)代器時(shí)使用日歷算法,消除了夏令時(shí)的偏差,解決夏令時(shí)修正問(wèn)題;當(dāng)使用定時(shí)迭代器之后,每一次迭代都按照當(dāng)前的系統(tǒng)時(shí)間進(jìn)行計(jì)算,所以能夠不受中途修正系統(tǒng)時(shí)間的影響,及時(shí)感知系統(tǒng)時(shí)間的修正,保證了計(jì)劃的準(zhǔn)確性;另外,本發(fā)明引入線程池技術(shù),從根本上解決時(shí)間漂移問(wèn)題,并且大大提高計(jì)劃調(diào)度以及執(zhí)行任務(wù)的能力,從而能夠容納更多的定時(shí)任務(wù)。
圖1為現(xiàn)有技術(shù)的流程圖;圖2為本發(fā)明提供的第一實(shí)施例的流程圖;圖3為本發(fā)明提供的第二實(shí)施例的流程圖。
具體實(shí)施例方式
本發(fā)明提供了一種計(jì)劃調(diào)度定時(shí)任務(wù)的方法,其主要思路是通過(guò)提供一個(gè)預(yù)定義的時(shí)間序列來(lái)實(shí)現(xiàn)任意復(fù)雜的計(jì)劃,該時(shí)間序列是一個(gè)個(gè)將要觸發(fā)任務(wù)執(zhí)行的時(shí)間點(diǎn),由定時(shí)迭代器產(chǎn)生。在注冊(cè)定時(shí)任務(wù)時(shí),只要指定定時(shí)迭代器,就等于指定了執(zhí)行定時(shí)任務(wù)的計(jì)劃。另外通過(guò)引入線程池技術(shù),也就是說(shuō)使用多個(gè)后臺(tái)線程并發(fā)執(zhí)行定時(shí)任務(wù),從根本上解決時(shí)間漂移問(wèn)題。
本發(fā)明的核心是基于定時(shí)迭代器,通過(guò)至少兩個(gè)線程調(diào)度并執(zhí)行計(jì)劃調(diào)度的定時(shí)任務(wù)。
本發(fā)明提供的第一實(shí)施例,如圖2所示,包括步驟S201,主線程注冊(cè)定時(shí)任務(wù),指定定時(shí)迭代器;并將定時(shí)任務(wù)放入任務(wù)隊(duì)列。
步驟S202、將所有處于等待狀態(tài)的后臺(tái)線程喚醒,之后結(jié)束主線程。
步驟S203、所述被喚醒的后臺(tái)線程參與線程競(jìng)爭(zhēng),只有一個(gè)后臺(tái)線程獲取調(diào)度定時(shí)任務(wù)的權(quán)利。
當(dāng)確認(rèn)所述任務(wù)隊(duì)列不為空時(shí)執(zhí)行步驟S204,即所述獲取調(diào)度定時(shí)任務(wù)的權(quán)利的后臺(tái)線程從所述任務(wù)隊(duì)列中取出執(zhí)行時(shí)間最早的定時(shí)任務(wù);步驟S205、判斷所述取出的定時(shí)任務(wù)的執(zhí)行時(shí)間是否大于當(dāng)前時(shí)間,若大于當(dāng)前時(shí)間,則執(zhí)行步驟S206,即等待,等待時(shí)間為執(zhí)行時(shí)間減去當(dāng)前時(shí)間,然后轉(zhuǎn)入步驟S207;否則,直接執(zhí)行步驟S207。
步驟S207、判斷是否能夠從所述定時(shí)迭代器中獲取到任務(wù)的下次執(zhí)行時(shí)間。
如果能夠從所述定時(shí)迭代器中獲取到任務(wù)的下次執(zhí)行時(shí)間,則表明該任務(wù)為重復(fù)執(zhí)行的任務(wù),不需要被取消,于是執(zhí)行步驟S208,即從定時(shí)迭代器中獲取任務(wù)的下次執(zhí)行時(shí)間;然后執(zhí)行步驟S209,即用所述獲取到的下次執(zhí)行時(shí)間去更新所述定時(shí)任務(wù)的執(zhí)行時(shí)間;然后執(zhí)行步驟S211;如果不能夠從所述定時(shí)迭代器中獲取到任務(wù)的下次執(zhí)行時(shí)間,則確定該任務(wù)為單次執(zhí)行的任務(wù)或重復(fù)執(zhí)行的任務(wù)已經(jīng)結(jié)束,則需要被取消,于是執(zhí)行步驟S210,即將所述定時(shí)任務(wù)從任務(wù)隊(duì)列中刪除,然后轉(zhuǎn)入步驟S211。
步驟S211,喚醒其它所有后臺(tái)線程(其它后臺(tái)線程轉(zhuǎn)入步驟S203,即去參與線程競(jìng)爭(zhēng)),然后執(zhí)行步驟S212。
步驟S212,所述后臺(tái)線程執(zhí)行所述獲取的定時(shí)任務(wù)。當(dāng)執(zhí)行完畢后,轉(zhuǎn)入步驟S203,即繼續(xù)與其它后臺(tái)線程參與線程競(jìng)爭(zhēng)。
在上述本發(fā)明的技術(shù)方案中,所有的定時(shí)迭代器都提供一個(gè)相同的接口供計(jì)劃調(diào)度框架調(diào)用,所述定時(shí)迭代器的本質(zhì)是一個(gè)用日期表示的時(shí)間點(diǎn)序列,可以通過(guò)各種算法來(lái)定義任意復(fù)雜的計(jì)劃。下面舉例說(shuō)明需要在一個(gè)每天固定時(shí)間執(zhí)行任務(wù)的定時(shí)迭代器的實(shí)現(xiàn)方法假設(shè)定時(shí)任務(wù)需要在每天早上9點(diǎn)執(zhí)行,當(dāng)計(jì)劃調(diào)度框架調(diào)用接口方法獲取下一次執(zhí)行時(shí)間時(shí),定時(shí)迭代器根據(jù)日歷算法,在本次執(zhí)行時(shí)間的基礎(chǔ)上加上一天,這樣就得到了第二天的執(zhí)行時(shí)間。當(dāng)需要夏令時(shí)修正時(shí),所述定時(shí)迭代器通過(guò)日歷算法進(jìn)行處理。
由上述本發(fā)明的技術(shù)方案可以看出當(dāng)本發(fā)明執(zhí)行到步驟S211時(shí),其它后臺(tái)線程被喚醒,參與線程競(jìng)爭(zhēng)后,其中的一個(gè)線程獲取調(diào)度定時(shí)任務(wù)的權(quán)利,開(kāi)始調(diào)度并執(zhí)行所述定時(shí)任務(wù);由于當(dāng)前線程處理定時(shí)任務(wù)需要一定時(shí)間,這與任務(wù)的復(fù)雜程度有關(guān),而另一線程完成調(diào)度后也可能馬上開(kāi)始調(diào)度并執(zhí)行定時(shí)任務(wù),如果是這樣,那么此時(shí)就有兩個(gè)后臺(tái)線程同時(shí)執(zhí)行定時(shí)任務(wù)。以此類推,本發(fā)明引入線程池技術(shù),從根本上解決了時(shí)間漂移的問(wèn)題,并且大大提高了計(jì)劃調(diào)度以及執(zhí)行任務(wù)的能力。
本發(fā)明提供的第二實(shí)施例,利用現(xiàn)有技術(shù)中的Java定時(shí)器框架提供的單次調(diào)度能力,使用線程池執(zhí)行定時(shí)任務(wù),同樣能夠達(dá)到本發(fā)明的目的。具體實(shí)施過(guò)程如圖3所示,包括步驟S301,主線程注冊(cè)定時(shí)任務(wù),并指定定時(shí)迭代器。
步驟S302,所述主線程從所述指定的定時(shí)迭代器中獲取定時(shí)任務(wù)的執(zhí)行時(shí)間。
步驟S303,所述主線程根據(jù)所述獲取的下次執(zhí)行時(shí)間在定時(shí)器框架中,如Java定時(shí)器框架中,注冊(cè)一個(gè)單次執(zhí)行的任務(wù);然后結(jié)束。
步驟S304,通過(guò)所述定時(shí)框架中的Timer(計(jì)時(shí)器)定時(shí)觸發(fā),將所述定時(shí)框架中的所述注冊(cè)的單次執(zhí)行的定時(shí)任務(wù)放入后臺(tái)線程池的任務(wù)隊(duì)列中,由后臺(tái)線程進(jìn)行處理,然后執(zhí)行步驟S305。
步驟304中,當(dāng)將所述定時(shí)框架中的所述注冊(cè)的單次執(zhí)行的定時(shí)任務(wù)放入后臺(tái)線程池的任務(wù)隊(duì)列中,由后臺(tái)線程進(jìn)行處理后,所述后臺(tái)線程對(duì)任務(wù)隊(duì)列中的定時(shí)任務(wù)進(jìn)行處理的過(guò)程具體包括所述后臺(tái)線程池通過(guò)競(jìng)爭(zhēng),只有其中一個(gè)線程獲取定時(shí)任務(wù)的執(zhí)行權(quán),其開(kāi)始調(diào)度執(zhí)行所述放入任務(wù)隊(duì)列中的定時(shí)任務(wù),執(zhí)行完畢后,刪除所述定時(shí)任務(wù)。
步驟S305,判斷是否能夠獲取到所述任務(wù)的下一次執(zhí)行時(shí)間,若能夠獲取下一次執(zhí)行時(shí)間,則表明所述任務(wù)為重復(fù)執(zhí)行的任務(wù),于是執(zhí)行步驟S306,即從定時(shí)迭代器中獲取下一次執(zhí)行時(shí)間,并根據(jù)所述獲取的下一次執(zhí)行時(shí)間向所述定時(shí)框架中注冊(cè)單次執(zhí)行的任務(wù);如果獲取不到下一次執(zhí)行時(shí)間,則表明所述任務(wù)為單次執(zhí)行的任務(wù)或重復(fù)執(zhí)行的任務(wù)已經(jīng)結(jié)束,于是執(zhí)行步驟S307,即結(jié)束此步驟。
由上述本發(fā)明的提供的技術(shù)方案可以看出,本發(fā)明將計(jì)劃以定時(shí)迭代器的方式獨(dú)立出來(lái),便于實(shí)現(xiàn)任意復(fù)雜的計(jì)劃;而且在實(shí)現(xiàn)定時(shí)迭代器時(shí)使用日歷算法,消除了夏令時(shí)的偏差,解決夏令時(shí)修正問(wèn)題;當(dāng)使用定時(shí)迭代器之后,每一次迭代都按照當(dāng)前的系統(tǒng)時(shí)間進(jìn)行計(jì)算,所以能夠不受中途修正系統(tǒng)時(shí)間的影響,及時(shí)感知系統(tǒng)時(shí)間的修正,保證了計(jì)劃的準(zhǔn)確性;另外,本發(fā)明引入線程池技術(shù),從根本上解決時(shí)間漂移問(wèn)題,并且大大提高計(jì)劃調(diào)度以及執(zhí)行任務(wù)的能力,從而能夠容納更多的定時(shí)任務(wù)。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種計(jì)劃調(diào)度定時(shí)任務(wù)的方法,其特征在于,包括A、基于定時(shí)迭代器,通過(guò)至少兩個(gè)線程調(diào)度并執(zhí)行計(jì)劃調(diào)度的定時(shí)任務(wù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A具體包括A1、后臺(tái)線程從任務(wù)隊(duì)列中獲取執(zhí)行時(shí)間最早的定時(shí)任務(wù);A2、判斷所述獲取的定時(shí)任務(wù)的執(zhí)行時(shí)間是否大于當(dāng)前時(shí)間,若大于,則所述線程進(jìn)入等待狀態(tài),當(dāng)?shù)却龝r(shí)間到時(shí),執(zhí)行步驟A3;否則直接執(zhí)行步驟A3;A3、判斷是否能夠獲取到所述定時(shí)任務(wù)的下次執(zhí)行時(shí)間,若能,則從所述定時(shí)迭代器中獲取所述定時(shí)任務(wù)的下次執(zhí)行時(shí)間,并根據(jù)所述獲取的下次執(zhí)行時(shí)間更新所述定時(shí)任務(wù)的執(zhí)行時(shí)間,然后執(zhí)行步驟A4;否則,刪除任務(wù)隊(duì)列中的所述定時(shí)任務(wù),然后執(zhí)行步驟A4;A4、喚醒線程池中的后臺(tái)線程,并執(zhí)行所述獲取的定時(shí)任務(wù),然后轉(zhuǎn)入步驟A1。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述步驟A1之前包括A5、主線程指定定時(shí)迭代器,并將計(jì)劃調(diào)度的定時(shí)任務(wù)放入任務(wù)隊(duì)列中,然后喚醒線程池中的后臺(tái)線程;A6、所述線程池中的后臺(tái)線程通過(guò)競(jìng)爭(zhēng),只有一個(gè)后臺(tái)線程獲取調(diào)度定時(shí)任務(wù)的權(quán)利。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述步驟A1具體包括A11、后臺(tái)線程判斷所述任務(wù)隊(duì)列是否為空,當(dāng)確認(rèn)所述任務(wù)隊(duì)列不為空時(shí),則執(zhí)行步驟A12;否則,繼續(xù)執(zhí)行步驟A11;A12、從所述任務(wù)隊(duì)列中獲取執(zhí)行時(shí)間最早的定時(shí)任務(wù)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述步驟A4還包括所述被喚醒的后臺(tái)線程通過(guò)競(jìng)爭(zhēng),只有一個(gè)后臺(tái)線程獲取調(diào)度定時(shí)任務(wù)的權(quán)利,然后轉(zhuǎn)入步驟A1。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A具體包括A7、所述主線程根據(jù)注冊(cè)的定時(shí)任務(wù),從所述指定的定時(shí)迭代器中獲取所述定時(shí)任務(wù)的執(zhí)行時(shí)間,并根據(jù)所述獲取的執(zhí)行時(shí)間在定時(shí)器框架中注冊(cè)單次執(zhí)行的任務(wù);A8、定時(shí)觸發(fā)所述定時(shí)框架,將其內(nèi)所述注冊(cè)的單次執(zhí)行的定時(shí)任務(wù)放入后臺(tái)線程池的任務(wù)隊(duì)列中,由所述后臺(tái)線程對(duì)所述放入任務(wù)隊(duì)列中的定時(shí)任務(wù)進(jìn)行處理;A9、當(dāng)從定時(shí)迭代器中獲取到所述定時(shí)任務(wù)的下一次執(zhí)行時(shí)間時(shí),根據(jù)所述獲取的下一次執(zhí)行時(shí)間向所述定時(shí)框架中注冊(cè)單次執(zhí)行的任務(wù)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,在所述步驟A7之前包括A10、主線程注冊(cè)定時(shí)任務(wù),并指定定時(shí)迭代器。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,步驟A8中所述后臺(tái)線程對(duì)所述放入任務(wù)隊(duì)列中的定時(shí)任務(wù)進(jìn)行處理的過(guò)程具體包括A81、通過(guò)所述后臺(tái)線程池中的線程的競(jìng)爭(zhēng),只有一個(gè)后臺(tái)線程獲取調(diào)度定時(shí)任務(wù)的權(quán)利;A82、所述獲取調(diào)度定時(shí)任務(wù)的權(quán)利的后臺(tái)線程,調(diào)度并執(zhí)行所述放入任務(wù)隊(duì)列中的定時(shí)任務(wù),當(dāng)執(zhí)行完畢后,刪除所述定時(shí)任務(wù)。
9.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述步驟A9具體包括A91、判斷是否能夠從定時(shí)迭代器中獲取到所述定時(shí)任務(wù)的下一次執(zhí)行時(shí)間,若是,則根據(jù)所述獲取的下一次執(zhí)行時(shí)間向所述定時(shí)框架中注冊(cè)單次執(zhí)行的任務(wù);否則,結(jié)束此步驟。
全文摘要
本發(fā)明涉及一種計(jì)劃調(diào)度定時(shí)任務(wù)的方法,其核心是基于定時(shí)迭代器,通過(guò)至少兩個(gè)線程調(diào)度并執(zhí)行計(jì)劃調(diào)度的定時(shí)任務(wù)。通過(guò)本發(fā)明將計(jì)劃以定時(shí)迭代器的方式獨(dú)立出來(lái),便于實(shí)現(xiàn)任意復(fù)雜的計(jì)劃;而且在實(shí)現(xiàn)定時(shí)迭代器時(shí)使用日歷算法,消除了夏令時(shí)的偏差,解決夏令時(shí)修正問(wèn)題;當(dāng)使用定時(shí)迭代器之后,每一次迭代都按照當(dāng)前的系統(tǒng)時(shí)間進(jìn)行計(jì)算,所以能夠不受中途修正系統(tǒng)時(shí)間的影響,及時(shí)感知系統(tǒng)時(shí)間的修正,保證了計(jì)劃的準(zhǔn)確性;另外,本發(fā)明引入線程池技術(shù),從根本上解決時(shí)間漂移問(wèn)題,并且大大提高計(jì)劃調(diào)度以及執(zhí)行任務(wù)的能力,從而能夠容納更多的定時(shí)任務(wù)。
文檔編號(hào)G06F9/46GK1862575SQ20051009090
公開(kāi)日2006年11月15日 申請(qǐng)日期2005年8月19日 優(yōu)先權(quán)日2005年8月19日
發(fā)明者張磊, 龔華 申請(qǐng)人:華為技術(shù)有限公司