欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種定時(shí)器任務(wù)服務(wù)方法

文檔序號(hào):7954598閱讀:215來(lái)源:國(guó)知局
專利名稱:一種定時(shí)器任務(wù)服務(wù)方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種通信系統(tǒng)的定時(shí)機(jī)制服務(wù)方法,尤其涉及的是,一種定時(shí)器任務(wù)服務(wù)方法。
背景技術(shù)
iSAP-S(集成服務(wù)應(yīng)用平臺(tái)-服務(wù)器端,Integrated ServiceApplication Platform-Server Side)中的Timer(定時(shí)器)的定時(shí)服務(wù)在資源的應(yīng)用上是一個(gè)輕量級(jí)的實(shí)現(xiàn),可以通過(guò)修改配置參數(shù),將其應(yīng)用在重量級(jí)的應(yīng)用場(chǎng)合,例如需要?jiǎng)?chuàng)建大量Timer的電信應(yīng)用中。它不同于JDK(java開(kāi)發(fā)包,Java Development Kit)提供的Timer,對(duì)每一個(gè)任務(wù)需要獨(dú)立的線程來(lái)執(zhí)行。
JDK提供了java.util.Timer(java運(yùn)用包中的定時(shí)類)支持Timer任務(wù)創(chuàng)建,JDK提供的Timer可以支持一次或多次觸發(fā)的Timer任務(wù)。該Timer任務(wù)可以是指定的觸發(fā)周期或者在指定的時(shí)間上觸發(fā)。當(dāng)Timer任務(wù)被執(zhí)行的時(shí)候,該任務(wù)的回調(diào)方法在一個(gè)單獨(dú)的線程內(nèi)被調(diào)用。
Java也提供了javax.swing.Timer(java圖形包中的定時(shí)器)的Timer實(shí)現(xiàn)。但這個(gè)Timer實(shí)現(xiàn)適合用在GUI(圖形用戶界面,Graphical UserInterface)中。這個(gè)Timer的事件分發(fā)機(jī)制更易于被GUI程序員理解,事件分發(fā)線程處理這種事件機(jī)制更為統(tǒng)一。另外所有的任務(wù)通過(guò)同一個(gè)線程進(jìn)行執(zhí)行,即一個(gè)線程被多個(gè)任務(wù)共享。
對(duì)于java.util.Timer,每一個(gè)Timer任務(wù)被執(zhí)行的時(shí)候,就會(huì)伴隨著一個(gè)線程被創(chuàng)建,直到這個(gè)任務(wù)被執(zhí)行完畢,或者被取消。如果在一個(gè)系統(tǒng)中有大量的Timer任務(wù)同時(shí)被觸發(fā),會(huì)導(dǎo)致大量的線程被創(chuàng)建,Timer任務(wù)自身將占用大量的線程,然而在一個(gè)系統(tǒng)中,線程的數(shù)量是有限制的,從而導(dǎo)致正常的處理將由于線程的缺乏而得不到處理。
因此在硬件能力方面有限制以及需要大量線程的場(chǎng)合,這種方案是不能勝任的。此外,當(dāng)在高壓力環(huán)境下,系統(tǒng)過(guò)多線程在運(yùn)行,線程調(diào)度器需要作很多的線程管理工作,這一定程度上也會(huì)影響線程調(diào)度的性能。
現(xiàn)有技術(shù)javax.swing.Timer解決方案傾向于用在GUI應(yīng)用中。它不適合應(yīng)用在Server端的程序。這個(gè)實(shí)現(xiàn)方案的一個(gè)缺點(diǎn)是所有的任務(wù)共享一個(gè)線程。這意味這任務(wù)的執(zhí)行會(huì)被排序,如果一個(gè)任務(wù)執(zhí)行需要很長(zhǎng)時(shí)間,其它需要執(zhí)行的任務(wù)只能等待前一個(gè)完成,這就導(dǎo)致了Timer任務(wù)有可能沒(méi)有被按時(shí)觸發(fā),從而影響了精度和執(zhí)行的效率。
因此,現(xiàn)有技術(shù)存在缺陷,需要改進(jìn)。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種Timer服務(wù)方法,當(dāng)Timer被創(chuàng)建的時(shí)候,不需要?jiǎng)?chuàng)建線程;通過(guò)重復(fù)使用線程池中的線程,以避免線程被頻繁創(chuàng)建從而增強(qiáng)系統(tǒng)的性能。
本發(fā)明的技術(shù)方案如下一種定時(shí)器任務(wù)服務(wù)方法,其包括以下步驟(1)建立定時(shí)器Timer任務(wù)隊(duì)列,用于容納Timer任務(wù);(2)調(diào)用Timer線程,當(dāng)所述Timer線程發(fā)現(xiàn)一個(gè)Timer任務(wù)到達(dá)觸發(fā)時(shí),從線程池中取出一個(gè)執(zhí)行線程,并把所述Timer任務(wù)提交給所述執(zhí)行線程;(3)在Timer任務(wù)完成后,所述執(zhí)行線程返回線程池。
所述的方法,其中,其步驟(3)還包括以下步驟(31)所述Timer線程檢查所述Timer任務(wù)是否重復(fù)任務(wù);
(32)如果所述Timer任務(wù)是重復(fù)任務(wù),則重新計(jì)算其下一次的觸發(fā)時(shí)間,并將其增加到任務(wù)隊(duì)列中;(33)如果所述Timer任務(wù)是一次性任務(wù),則從任務(wù)隊(duì)列刪除該任務(wù)。
所述的方法,其中,所述Timer任務(wù)隊(duì)列基于平衡樹(shù)技術(shù)實(shí)現(xiàn)。
所述的方法,其中,所述Timer任務(wù)隊(duì)列設(shè)置兩個(gè)用戶接口,包括增加任務(wù)和刪除任務(wù)。
所述的方法,其中,所述Timer任務(wù)隊(duì)列將任務(wù)發(fā)生變化的信息傳輸給Timer線程。
所述的方法,其中,所述Timer線程從Timer任務(wù)隊(duì)列中獲取具有最小觸發(fā)時(shí)間的Timer任務(wù)。
所述的方法,其中,所述Timer線程給一個(gè)Timer任務(wù)分配了執(zhí)行線程后,Timer線程自動(dòng)處理隊(duì)列中的其它Timer任務(wù)。
所述的方法,其中,所述Timer任務(wù)被線程池中獲得的執(zhí)行線程在后臺(tái)執(zhí)行。
所述的方法,其中,其重復(fù)調(diào)用所述線程池的執(zhí)行線程,用于執(zhí)行Timer任務(wù)。
所述的方法,其中,所述Timer任務(wù)被創(chuàng)建的時(shí)候,不為其創(chuàng)建特定執(zhí)行線程。
采用上述方案,應(yīng)用本發(fā)明的系統(tǒng)可以支持大量的Timer任務(wù),包括創(chuàng)建和取消Timer操作;同時(shí)避免了大量線程被創(chuàng)建,優(yōu)化了相關(guān)資源,增強(qiáng)了系統(tǒng)的整體性能;使得整個(gè)系統(tǒng)的線程和其它資源都得到了有效應(yīng)用。


圖1為本發(fā)明的定時(shí)器任務(wù)服務(wù)流程圖。
圖2為本發(fā)明的具體實(shí)施例中定時(shí)器任務(wù)服務(wù)的流程圖。
具體實(shí)施例方式
本發(fā)明的核心思想是提供了一種定時(shí)器任務(wù)服務(wù)方法,排列成定時(shí)器任務(wù)隊(duì)列,使用專用的線程實(shí)現(xiàn)任務(wù)的調(diào)度,使用線程池中的執(zhí)行線程執(zhí)行已經(jīng)到觸發(fā)時(shí)的任務(wù)隊(duì)列中的任務(wù),執(zhí)行線程完成服務(wù)后被回送到線程池中,完成了定時(shí)器任務(wù)的服務(wù)。
本發(fā)明中的Timer服務(wù)是使用Timer線程實(shí)現(xiàn)對(duì)執(zhí)行線程和對(duì)將來(lái)需要執(zhí)行的任務(wù)進(jìn)行調(diào)度的一種定時(shí)機(jī)制。
本發(fā)明中使用Timer任務(wù)隊(duì)列排列需要執(zhí)行的任務(wù),使用優(yōu)先隊(duì)列作為核心數(shù)據(jù)結(jié)構(gòu),它在內(nèi)存中表示為平衡二叉樹(shù)。隊(duì)列(queue[n])的左孩子(left son)和右孩子(right son)分別為偶數(shù)隊(duì)列(queue[2*n])和奇數(shù)隊(duì)列(queue[2*n+1])。優(yōu)先隊(duì)列基于任務(wù)的觸發(fā)時(shí)間進(jìn)行排序。最小的任務(wù)放在隊(duì)頭(queue[1]),對(duì)樹(shù)中的任意一個(gè)結(jié)點(diǎn)n,假設(shè)它的后代為d,那么結(jié)點(diǎn)n的觸發(fā)時(shí)間小于等于(<=)后代d的觸發(fā)時(shí)間。
Timer線程是系統(tǒng)中使用的一個(gè)專用的線程,該線程負(fù)責(zé)調(diào)度Timer任務(wù)隊(duì)列中的Timer任務(wù),讀取隊(duì)列中的第一個(gè)任務(wù)的觸發(fā)時(shí)間,并計(jì)算出相對(duì)于當(dāng)前時(shí)間需要等待的時(shí)長(zhǎng),然后該線程就等待計(jì)算所得的時(shí)長(zhǎng),當(dāng)?shù)却龝r(shí)間到達(dá)時(shí),處理Timer任務(wù)。然后繼續(xù)同樣的處理,讀取下一個(gè)Timer任務(wù)。
下面結(jié)合附圖1說(shuō)明本發(fā)明的具體實(shí)施流程步驟101、建立Timer任務(wù)隊(duì)列。
Timer任務(wù)隊(duì)列基于平衡樹(shù)技術(shù)實(shí)現(xiàn),其用于容納Timer任務(wù)。同時(shí),Timer任務(wù)隊(duì)列提供了對(duì)隊(duì)列的基本操作,如刪除一個(gè)任務(wù)、增加一個(gè)任務(wù)、對(duì)任務(wù)進(jìn)行排序等;其功能是管理Timer任務(wù)。當(dāng)一個(gè)新的任務(wù)被加到Timer任務(wù)隊(duì)列中,隊(duì)列自動(dòng)重排平衡樹(shù)(balanced tree)以確保這個(gè)任務(wù)被放到了正確的位置。同樣地,當(dāng)一個(gè)任務(wù)被刪除時(shí),平衡樹(shù)自動(dòng)重排剩下的任務(wù)。
因此,Timer任務(wù)隊(duì)列,向用戶提供了兩個(gè)接口一個(gè)為增加Timer任務(wù),一個(gè)為刪除Timer任務(wù)。當(dāng)一個(gè)Timer任務(wù)被增加或者刪除時(shí),Timer任務(wù)隊(duì)列會(huì)依據(jù)每個(gè)任務(wù)需要被觸發(fā)的時(shí)間按照升序自動(dòng)重排該隊(duì)列。
用戶可以在用戶模塊中設(shè)置或取消Timer服務(wù);Timer服務(wù)模塊將用戶的操作轉(zhuǎn)為向Timer任務(wù)隊(duì)列增加或刪除任務(wù)。
步驟102、當(dāng)一個(gè)Timer任務(wù)到達(dá)觸發(fā)時(shí),從線程池中取一個(gè)執(zhí)行線程,執(zhí)行所述Timer任務(wù)。
Timer線程將監(jiān)控Timer任務(wù)隊(duì)列,使得Timer線程可以從隊(duì)列中獲取最近要觸發(fā)的Timer任務(wù)。
當(dāng)Timer任務(wù)隊(duì)列通知Timer線程任務(wù)發(fā)生了變化,Timer線程從Timer任務(wù)隊(duì)列中取下一個(gè)具有最小觸發(fā)時(shí)間的任務(wù)。通過(guò)調(diào)用系統(tǒng)中專用的Timer線程,其讀取隊(duì)列中的第一個(gè)任務(wù)的觸發(fā)時(shí)間,并計(jì)算出相對(duì)于當(dāng)前時(shí)間需要等待的時(shí)長(zhǎng),然后該線程就等待計(jì)算所得的時(shí)長(zhǎng)。
當(dāng)?shù)却龝r(shí)間到達(dá)時(shí),該Timer任務(wù)的回調(diào)方法就會(huì)被從線程池中獲得的后臺(tái)執(zhí)行線程調(diào)用。
Timer線程將進(jìn)行下面的檢查,以確定下一步需要進(jìn)行的操作如果該任務(wù)的觸發(fā)時(shí)間小于或等于當(dāng)前時(shí)間,將立即從線程池中調(diào)用執(zhí)行線程執(zhí)行該任務(wù);如果該任務(wù)的觸發(fā)時(shí)間大于當(dāng)前的時(shí)間,Timer線程計(jì)算該任務(wù)等待時(shí)間,即觸發(fā)時(shí)間減去當(dāng)前時(shí)間的差值,然后Timer線程將等待該差值時(shí)間。
當(dāng)Timer線程正在等待時(shí),如果一個(gè)新的任務(wù)被增加,Timer線程將會(huì)得到通知,Timer線程將會(huì)被喚醒并重新從隊(duì)列中取最小觸發(fā)時(shí)間的Timer。當(dāng)增加的timer任務(wù)具有最短的觸發(fā)時(shí)間,從而需要重新取最小觸發(fā)時(shí)間的Timer;如果沒(méi)有新任務(wù)被增加,則Timer線程完成等待后被喚醒,通過(guò)把該任務(wù)扔給線程池觸發(fā)該任務(wù)。
一旦Timer線程等待完成,Timer線程將從線程池中獲取一個(gè)執(zhí)行線程,并用該線程執(zhí)行該Timer任務(wù)。
步驟103、執(zhí)行線程返回線程池。
Timer線程給Timer任務(wù)分配了執(zhí)行線程之后,Timer線程會(huì)自動(dòng)處理隊(duì)列中的其它任務(wù);同時(shí),執(zhí)行線程自動(dòng)返回線程池。
Timer線程將會(huì)檢查該Timer任務(wù)是需要多次觸發(fā)的重復(fù)任務(wù)還是一次性的任務(wù)。如果該任務(wù)是重復(fù)任務(wù),該任務(wù)將會(huì)被重新計(jì)算下一次的觸發(fā)時(shí)間,并被增加到Timer任務(wù)隊(duì)列中。如果該任務(wù)是已經(jīng)完成重復(fù)的重復(fù)任務(wù)或一次性任務(wù),則該任務(wù)被刪除。當(dāng)任務(wù)被刪除時(shí),Timer隊(duì)列將會(huì)自動(dòng)排序Timer任務(wù)平衡樹(shù)。
以下結(jié)合附圖2說(shuō)明本發(fā)明實(shí)現(xiàn)實(shí)施具體的步驟。
用戶設(shè)置Timer(1);Timer把增加任務(wù)的信息通知Timer任務(wù)隊(duì)列(2);Timer任務(wù)隊(duì)列把任務(wù)隊(duì)列發(fā)生變化的信息通知Timer線程(3),并且基于任務(wù)的觸發(fā)時(shí)間將任務(wù)排序;Timer線程從Timer任務(wù)隊(duì)列中獲取下一個(gè)具有最小觸發(fā)時(shí)間的Timer任務(wù)(4);判斷是否立即執(zhí)行該任務(wù)(5)。
如果該任務(wù)觸發(fā)時(shí)間小于或等于當(dāng)前時(shí)間(6),則通過(guò)把該任務(wù)扔給線程池觸發(fā)該任務(wù)(7),并且判斷是否屬于重復(fù)任務(wù)(8)。若是一次性的任務(wù)或者重復(fù)任務(wù)已經(jīng)完成重復(fù)(9),則扔掉該任務(wù),處理下一個(gè)任務(wù)(10),轉(zhuǎn)向獲取下一個(gè)任務(wù)(4)。若是重復(fù)任務(wù),則更新任務(wù)的下一次調(diào)度的時(shí)間,并重新放到Timer任務(wù)隊(duì)列(11),轉(zhuǎn)向把增加任務(wù)的信息通知Timer任務(wù)隊(duì)列(2)。
如果該任務(wù)觸發(fā)時(shí)間大于當(dāng)前時(shí)間(12),則等待該任務(wù)的觸發(fā)時(shí)間到達(dá),完成等待后被Timer線程喚醒(13),從而轉(zhuǎn)向該任務(wù)扔給線程池觸發(fā)該任務(wù)(7),并且判斷是否屬于重復(fù)任務(wù)(8)。在等待完成前如果增加新任務(wù)被喚醒(14),則轉(zhuǎn)向獲取下一個(gè)任務(wù)(4)。
用戶也可以取消Timer(1A),Timer把刪除任務(wù)的信息通知Timer任務(wù)隊(duì)列(2A),Timer任務(wù)隊(duì)列將該任務(wù)從隊(duì)列中刪除。
以下是本發(fā)明的應(yīng)用之一在電信級(jí)的應(yīng)用平臺(tái)iSAP server,基于SIP的電信應(yīng)用需要?jiǎng)?chuàng)建大量的Timer來(lái)處理業(yè)務(wù)超時(shí),特別是在峰值應(yīng)用時(shí),系統(tǒng)中存在大量的Timer,使用JDK提供的Timer機(jī)制,無(wú)法適應(yīng)這種峰值應(yīng)用。而使用本發(fā)明的解決方案,系統(tǒng)很容易支持到超過(guò)20000個(gè)Timer任務(wù);而且在支持大量Timer任務(wù)的同時(shí),系統(tǒng)仍然有非常高的性能。這主要得益于線程池的使用以及其它相關(guān)資源的優(yōu)化。由于Timer實(shí)現(xiàn)使用和重用了線程池中的線程,避免了大量線程被創(chuàng)建,因此整個(gè)系統(tǒng)的線程和其它資源都得到了有效應(yīng)用。
在本發(fā)明中,Timer任務(wù)隊(duì)列通過(guò)Timer任務(wù)隊(duì)列和Timer線程的應(yīng)用,提出不需要對(duì)每個(gè)Timer任務(wù)建立獨(dú)立的執(zhí)行線程,因此突破了系統(tǒng)允許的最大線程數(shù)量的限制;從而能夠支持大量的Timer任務(wù)。
同時(shí)在本發(fā)明中,使用線程池,重復(fù)使用線程池中的執(zhí)行線程完成Timer任務(wù),不需要頻繁地創(chuàng)建線程,從而為系統(tǒng)提供了更好的性能。
應(yīng)當(dāng)理解的是,對(duì)本領(lǐng)域普通技術(shù)人員來(lái)說(shuō),可以根據(jù)上述說(shuō)明加以改進(jìn)或變換,而所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種定時(shí)器任務(wù)服務(wù)方法,其特征在于,其包括以下步驟(1)建立定時(shí)器Timer任務(wù)隊(duì)列,用于容納Timer任務(wù);(2)調(diào)用Timer線程,當(dāng)所述Timer線程發(fā)現(xiàn)一個(gè)Timer任務(wù)到達(dá)觸發(fā)時(shí),從線程池中取出一個(gè)執(zhí)行線程,并把所述Timer任務(wù)提交給所述執(zhí)行線程;(3)在Timer任務(wù)完成后,所述執(zhí)行線程返回線程池。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,其步驟(3)還包括以下步驟(31)所述Timer線程檢查所述Timer任務(wù)是否重復(fù)任務(wù);(32)如果所述Timer任務(wù)是重復(fù)任務(wù),則重新計(jì)算其下一次的觸發(fā)時(shí)間,并將其增加到任務(wù)隊(duì)列中;(33)如果所述Timer任務(wù)是一次性任務(wù),則從任務(wù)隊(duì)列刪除該任務(wù)。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述Timer任務(wù)隊(duì)列基于平衡樹(shù)技術(shù)實(shí)現(xiàn)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述Timer任務(wù)隊(duì)列設(shè)置兩個(gè)用戶接口,包括增加任務(wù)和刪除任務(wù)。
5.根據(jù)權(quán)利要求1、2或4任意一項(xiàng)所述的方法,其特征在于,所述Timer任務(wù)隊(duì)列將任務(wù)發(fā)生變化的信息傳輸給Timer線程。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述Timer線程從Timer任務(wù)隊(duì)列中獲取具有最小觸發(fā)時(shí)間的Timer任務(wù)。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述Timer線程給一個(gè)Timer任務(wù)分配了執(zhí)行線程后,Timer線程自動(dòng)處理隊(duì)列中的其它Timer任務(wù)。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述Timer任務(wù)被線程池中獲得的執(zhí)行線程在后臺(tái)執(zhí)行。
9.根據(jù)權(quán)利要求1所述的方法,其特征在于,其重復(fù)調(diào)用所述線程池的執(zhí)行線程,用于執(zhí)行Timer任務(wù)。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述Timer任務(wù)被創(chuàng)建的時(shí)候,不為其創(chuàng)建特定執(zhí)行線程。
全文摘要
本發(fā)明提供了一種Timer服務(wù)方法,其包括以下步驟(1)建立定時(shí)器Timer任務(wù)隊(duì)列,用于容納Timer任務(wù);(2)調(diào)用Timer線程,當(dāng)所述Timer線程發(fā)現(xiàn)一個(gè)Timer任務(wù)到達(dá)觸發(fā)時(shí),從線程池中取出一個(gè)執(zhí)行線程,并把所述Timer任務(wù)提交給所述執(zhí)行線程;(3)在Timer任務(wù)完成后,所述執(zhí)行線程返回線程池。應(yīng)用本發(fā)明的系統(tǒng)可以支持大量的Timer任務(wù),包括創(chuàng)建和取消Timer操作;同時(shí)避免了大量線程被創(chuàng)建,優(yōu)化了相關(guān)資源,增強(qiáng)了系統(tǒng)的整體性能;使得整個(gè)系統(tǒng)的線程和其它資源都得到了有效應(yīng)用。
文檔編號(hào)H04L29/02GK1873615SQ20061003328
公開(kāi)日2006年12月6日 申請(qǐng)日期2006年1月20日 優(yōu)先權(quán)日2006年1月20日
發(fā)明者加亞偌吉, 張民衛(wèi) 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
崇阳县| 贵港市| 沛县| 阳东县| 靖边县| 百色市| 贵定县| 无棣县| 雅江县| 利川市| 云龙县| 泾阳县| 锡林郭勒盟| 青海省| 南康市| 永安市| 巩留县| 阳谷县| 黔西| 武宁县| 五华县| 剑河县| 乌拉特前旗| 敖汉旗| 鹰潭市| 即墨市| 革吉县| 开化县| 莱州市| 同仁县| 通州市| 海淀区| 白玉县| 外汇| 易门县| 根河市| 安徽省| 济宁市| 赤城县| 土默特左旗| 轮台县|