專利名稱:一種定時器任務自動處理方法及系統的制作方法
技術領域:
本發明屬于計算機技術領域,尤其涉及一種定時器任務自動處理方法及系統。
背景技術:
在應用系統/應用平臺中,定時器(Timer)常被用來完成周期性的任務或特定時刻的待執行任務。對于需要支持大量Timer任務的平臺或系統,Timer任務管理和執行決定了該平臺或系統的性能。在現有技術中主要通過平衡堆的方式進行Timer任務的管理和執行,需要花費較多的時間來進行平衡堆的調整,系統開銷較大。針對該問題,華為技術有限公司提出申請號為200510130535. 1的發明專利申請, 在該申請中提出了一種對定時器任務進行管理的方法,具體為提供了一種對Timer (定時器)任務進行管理的方法,包括步驟在系統中創建至少一個固定周期定時器任務隊列,所述固定周期定時器任務隊列的屬性包括一特定觸發周期;將系統中的定時器任務放入與其觸發周期相同的所述固定周期定時器任務隊列,對該定時器任務進行管理。然而,在該申請中,將特定周期的任務放入特定周期定時器任務隊列中進行處理,嚴重約束了任務的觸發周期,不適用于處理多樣化的周期任務,也不能有效處理隨機的定時器任務,同時,一個固定周期定時器任務隊列的執行時順序的,在處理大量定時器任務時,無法實現并發處理,系統資源的利用率低。
發明內容
本發明實施例的目的在于提供一種定時器任務自動處理方法及系統,旨在解決現有技術Timer任務處理效率低、系統資源利用率低的問題。本發明實施例是這樣實現的,一種定時器任務自動處理方法,所述方法包括下述步驟循環監聽第一預設隊列中是否有定時器任務進入;當監聽到所述第一預設隊列中有定時器任務進入時,將所述定時器任務添加到第二預設隊列;循環監聽所述第二預設隊列是否有定時器任務進入;當監聽到所述第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。本發明實施例的另一目的在于提供一種定時器任務自動處理系統,其特征在于, 所述系統包括第一監聽單元,用于循環監聽第一預設隊列中是否有定時器任務進入;任務添加單元,用于當監聽到第一預設隊列中有定時器任務進入時,將所述定時器任務添加到第二預設隊列;第二監聽單元,用于循環監聽第二預設隊列是否有定時器任務進入;以及任務處理單元,用于當監聽到所述第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。本發明實施例對第一預設隊列進行循環監聽,當監聽到有定時器任務進入時,將定時器任務添加到第二預設隊列,同時,循環監聽第二預設隊列是否有定時器任務進入,當監聽到第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務,解決了現有技術無法實現定時器任務并發處理,系統資源的利用率低的問題,通過調用對應的線程對定時器任務進行處理,提高了任務的并發處理能力,進而提高了系統資源的利用率。
圖1是本發明實施例一提供的定時器任務自動處理方法的實現流程圖;圖2是本發明實施例二提供的定時器任務自動處理方法的實現流程圖;圖3是本發明實施例三提供的定時器任務自動處理方法的實例圖;圖4是本發明實施例四提供的定時器任務自動處理系統的結構圖;圖5是本發明實施例五提供的定時器任務自動處理系統的結構圖;圖6是本發明實施例六提供的定時器任務自動處理系統的結構圖。
具體實施例方式為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。以下結合具體實施例對本發明的具體實現進行詳細描述實施例一圖1示出了本發明實施例一提供的定時器任務自動處理方法的實現流程,詳述如下在步驟SlOl中,循環監聽第一預設隊列中是否有定時器任務進入。在步驟S102中,當監聽到第一預設隊列中有定時器任務進入時,將定時器任務添加到第二預設隊列。在本發明實施例中,預先建立一個隊列,用于存儲定時器任務,該定時器任務可以為用戶定制的定時任務,也可以是其它應用程序生成的定時任務,在此不用限制并發明,同時,對該隊列循環監聽,從而實現對用戶定制的定時器任務的實時發現。當監聽到第一預設隊列中有定時器任務進入時,將定時器任務添加到第二預設隊列,并在第一預隊列中刪除該定時器任務。在步驟S103中,循環監聽第二預設隊列是否有定時器任務進入。在本發明實施例中,預先創建一個隊列,即第二預隊列,以用于臨時存放將要執行的定時器任務,起到一定緩存作用,并對該隊列進行實時的監聽。在步驟S104中,當監聽到第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。在本發明實施例中,當監聽到第二預設隊列中有定時器任務進入時,調用對應的線程執行該定時器任務,并刪除第二預設隊列中的該任務,以實現定時器任務的實時處理,在具體實施過程中,可以創建一個新的線程對該定時器任務進行處理,也可以將該定時器任務添加到預先創建的線程池中,由線程池中的線程進行執行,從而大大減少了線程的創建和銷毀次數,提高了定時器任務處理的工作效率。具體地,在本發明實施例中,可以預先創建第一監聽線程和第二監聽線程分別用于循環監聽第一預設隊列和第二預設隊列,從而提高系統的并發程度,提高中央處理器 (CPU)、內存等資源的利用率。在本發明實施例中,當定時器任務執行成功時,則可以返回執行結果數據,當定時器任務執行失敗時,較優地,應將定時器任務寫入第三預設隊列中,以方便用戶對任務執行失敗的原因進行分析,或在其下一循環周期的定時時間到達時,直接將其加入第一預設隊列再次執行,從而提高任務異常處理的智能化程度。在本發明實施例中,預先建立第一預設隊列和第二預設隊列,并對兩個隊列進行循環監聽,兩個隊列中任務的添加、監聽,以及線程的處理都可以進行并發執行,從而提高了任務的并發處理能力,進而提高了系統資源的利用率。實施例二 在本發明實施例中,采用線程池執行定時器任務,從而防止了頻繁的線程創建與銷毀引起的大量系統資源浪費,使得更多的CPU時間和內存可以用來處理實際的定時器任務(例如,商業應用)。圖2示出了本發明實施例二提供的定時器任務自動處理方法的實現流程,詳述如下在步驟S201中,循環監聽第一預設隊列中是否有定時器任務進入。在步驟S202中,當監聽到第一預設隊列中有定時器任務進入時,將定時器任務添加到第二預設隊列。 在本發明實施例中,預先建立一個隊列,用于存儲定時器任務,該定時器任務可以為用戶定制的定時任務,也可以是其它應用程序生成的定時任務,在此不用限制并發明,同時,循環監聽該隊列,從而實現對用戶定制的定時器任務的實時發現。當監聽到第一預設隊列中有定時器任務進入時,將定時器任務添加到第二預設隊列,并在第一預隊列中刪除該定時器任務。在步驟S203中,循環監聽第二預設隊列是否有定時器任務進入。在本發明實施例中,預先創建一個隊列,即第二預隊列,以用于臨時存放將要執行的定時器任務,并對該隊列進行實時的監聽。在步驟S204中,當監聽到第二預設隊列中有定時器任務進入時,將定時器任務添加到預先創建的線程池。在線程池中,先啟動若干數量的線程,并讓這些線程都處于睡眠狀態,當接收到一個新請求時,喚醒線程池中的某一個睡眠線程,讓其處理該請求,當處理完請求后,線程又處于睡眠狀態,線程可以循環執行接收到請求任務。在本發明實施例中,當監聽到第二預設隊列中有定時器任務進入時,將定時器任務添加到預先創建的線程池,由線程池進行定時器任務的執行。在步驟S205中,判斷線程池的緩存隊列是否已滿,當線程池的緩存隊列已滿時, 執行步驟S206,否則執行步驟S207。
在本發明實施例中,線程池中設置一緩存隊列用于緩存添加至線程池中、來不及處理執行的定時器任務,緩存隊列的長度在創建線程池時進行設定。在步驟S206中,當線程池的緩存隊列已滿時,阻塞第二預設隊列的監聽。在本發明實施例中,當線程池的緩存隊列已滿時,阻塞第二預設隊列的監聽,從而不再將進入第二預設隊列添加到線程池,第二預設隊列在一定程度上可以緩存進入的定時器任務。當經過一段時間后,線程池的緩存隊列中部分定時器任務已經被執行完,可以接收新的定時器任務進入,此時,啟動第二預設隊列的循環監聽。在步驟S207中,當線程池的緩存隊列未滿時,控制線程池執行定時器任務。在本發明實施例中,當線程池的緩存隊列未滿時,如果線程池的緩存隊列為空,則可以喚醒一個休眠的線程立即執行該定時器任務,如果線程池的緩存隊列不為空,則將定時器任務添加緩沖隊列,等待被執行,當排在其前方的定時器任務被執行完成時,則執行該任務。在本發明實施例中,當定時器任務添加到線程池時,刪除第二預設隊列中的該任務,如果定時器任務在線程池中被成功執行,則通過線程池提高的接口返回相應的執行結果數據,當定時器任務執行失敗時,較優地,應將定時器任務寫入第三預設隊列中,以方便用戶對任務執行失敗的原因進行分析,或在其下一循環周期的定時時間到達時,直接將其加入第一預設隊列再次執行,從而提高任務異常處理的智能化程度。在本發明實施例中,將定時器任務添加到線程池,由線程池中的線程進行任務的執行,減少單獨創建和銷毀線程的次數,特別是一些資源耗費此較大的線程的創建和銷毀, 從而盡量利用已有線程來執行定時器任務,提高系統的并發能力,提高系統資源的利用效率。實施例三圖3示出了本發明實施例三提供的定時器任務自動處理方法的具體實例圖,詳述如下在本發明實施例中,定時器任務自動處理系統包括三個部分Web客戶端、服務器和數據庫,數據庫可以作為服務器的一部分,也可以單獨部署。在Web客戶端可以向用戶提供失敗任務的查詢、定時器任務的參數配置,以方便用戶定時器任務的定制;在服務器上創建有用于處理定時器任務的線程池、以及用于數據庫存取的DAO ;數據庫用于存儲定時器相關的數據,例如用于存儲用戶定制的定時器任務的第一預設隊列、用于存儲從第一預設隊列進入的定時器任務的第二預設隊列以及用于存儲線程池中執行失敗的定時器任務的失敗任務隊列。具體地,定時器任務自動處理方法的具體實現不受此限制。本領域普通技術人員可以理解實現上述實施例方法中的全部或部分步驟是可以通過程序來指令相關的硬件來完成,所述的程序可以存儲于一計算機可讀取存儲介質中, 所述的存儲介質,如ROM/RAM、磁盤、光盤等。實施例四圖4示出了本發明實施例四提供的定時器任務自動處理系統的結構,為了便于說明,僅示出了與本發明實施例相關的部分,其中包括第一監聽單元41循環監聽第一預設隊列中是否有定時器任務進入。任務添加單元42當監聽到第一預設隊列中有定時器任務進入時,將定時器任務添加到第二預設隊列。第二監聽單元43循環監聽第二預設隊列是否有定時器任務進入。任務處理單元44當監聽到第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。任務寫入單元45當處理進入的定時器任務失敗時,將定時器任務寫入第三預設隊列中。在本發明實施例中,預先建立第一預設隊列和第二預設隊列,并對兩個隊列進行循環監聽,兩個隊列中任務的添加、監聽,以及線程的處理都可以進行并發執行,從而提高了任務的并發處理能力,進而提高了系統資源的利用率。實施例五圖5示出了本發明實施例五提供的定時器任務自動處理系統的結構,為了便于說明,僅示出了與本發明實施例相關的部分,其中包括線程創建單元51創建第一監聽線程和第二監聽線程。第一監聽單元52循環監聽第一預設隊列中是否有定時器任務進入。第一監聽單元52可以包括用于調用第一監聽線程循環監聽第一預設隊列中是否有定時器任務進入的第一監聽子單元521。任務添加單元53當監聽到第一預設隊列中有定時器任務進入時,將定時器任務添加到第二預設隊列。第二監聽單元M循環監聽第二預設隊列是否有定時器任務進入。第二監聽單元 M可以包括用于調用第二監聽線程循環監聽第二預設隊列中是否有定時器任務進入的第二監聽子單元Ml。任務處理單元55當監聽到第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。實施例六在本發明實施例中,采用線程池執行定時器任務,從而防止了頻繁的線程創建與銷毀引起的大量系統資源浪費,使得更多的CPU時間和內存用來處理實際的定時器任務 (例如,商業應用)。圖6示出了本發明實施例六提供的定時器任務自動處理系統的結構,為了便于說明,僅示出了與本發明實施例相關的部分,其中包括第一監聽單元61循環監聽第一預設隊列中是否有定時器任務進入。任務添加單元62當監聽到第一預設隊列中有定時器任務進入時,將定時器任務添加到第二預設隊列。第二監聽單元63循環監聽第二預設隊列是否有定時器任務進入。任務處理單元64當監聽到第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。任務處理子單元641當監聽到第二預設隊列中有定時器任務進入時,將定時器任務添加到預先創建的線程池,控制線程池執行所述定時器任務。在本發明實施例中,當線程池的緩存隊列未滿時,如果線程池的緩存隊列為空,則可以喚醒一個休眠的線程立即執行該定時器任務,如果線程池的緩存隊列不為空,則將定時器任務添加緩沖隊列,等待被執行,當排在其前方的定時器任務被執行完成時,則執行該任務。判斷子單元642判斷線程池的緩存隊列是否已滿。監聽阻塞子單元643當線程池緩存隊列已滿時,阻塞第二預設隊列的監聽。任務寫入單元65當處理進入的定時器任務失敗時,將定時器任務寫入第三預設隊列中。本發明實施例對第一預設隊列進行循環監聽,當監聽到有定時器任務進入時,將定時器任務添加到第二預設隊列,同時,循環監聽第二預設隊列是否有定時器任務進入,當監聽到第二預設隊列中有定時器任務進入時,將定時器任務添加到線程池,由線程池中的線程進行執行,從而大大減少線程的創建和銷毀次數,提高了任務的并發處理能力,進而提高了系統資源的利用率和用戶體驗。以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護范圍之內。
權利要求
1.一種定時器任務自動處理方法,其特征在于,所述方法包括下述步驟 循環監聽第一預設隊列中是否有定時器任務進入;當監聽到所述第一預設隊列中有定時器任務進入時,將定時器任務添加到第二預設隊列;循環監聽所述第二預設隊列是否有定時器任務進入;當監聽到所述第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。
2.如權利要求1所述的方法,其特征在于,所述循環監聽第一預設隊列中是否有定時器任務進入的步驟之前,所述方法還包括創建第一監聽線程和第二監聽線程;所述循環監聽第一預設隊列中是否有定時器任務進入的步驟具體為調用所述第一監聽線程循環監聽第一預設隊列中是否有定時器任務進入; 所述循環監聽第二預設隊列中是否有定時器任務進入的步驟具體為 調用所述第二監聽線程循環監聽第二預設隊列中是否有定時器任務進入。
3.如權利要求1所述的方法,其特征在于,所述當監聽到所述第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務的步驟具體為當監聽到所述第二預設隊列中有定時器任務進入時,將所述定時器任務添加到預先創建的線程池,控制所述線程池執行所述定時器任務。
4.如權利要求3所述的方法,其特征在于,將所述定時器任務添加到預先創建的線程池的步驟之后,控制所述線程池執行所述定時器任務的步驟之前,所述方法還包括判斷所述線程池的緩存隊列是否已滿;當所述線程池緩存隊列已滿時,阻塞所述第二預設隊列的監聽;當所述線程池緩存隊列未滿時,執行控制所述線程池執行所述定時器任務的步驟。
5.如權利要求1或4所述的方法,其特征在于,所述當監聽到所述第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務的步驟之后,所述方法還包括當處理進入的定時器任務失敗時,將所述定時器任務寫入第三預設隊列中。
6.一種定時器任務自動處理系統,其特征在于,所述系統包括第一監聽單元,用于循環監聽第一預設隊列中是否有定時器任務進入; 任務添加單元,用于當監聽到第一預設隊列中有定時器任務進入時,將所述定時器任務添加到第二預設隊列;第二監聽單元,用于循環監聽第二預設隊列是否有定時器任務進入;以及任務處理單元,用于當監聽到所述第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。
7.如權利要求6所述的系統,其特征在于,所述系統還包括 線程創建單元,用于創建第一監聽線程和第二監聽線程;所述第一監聽單元包括第一監聽子單元,用于調用所述第一監聽線程循環監聽第一預設隊列中是否有定時器任務進入;所述第二監聽單元包括第二監聽子單元,用于調用所述第二監聽線程循環監聽第二預設隊列中是否有定時器任務進入。
8.如權利要求6所述的系統,其特征在于,所述任務處理單元包括任務處理子單元,用于當監聽到第二預設隊列中有定時器任務進入時,將定時器任務添加到預先創建的線程池,控制所述線程池執行所述定時器任務。
9.如權利要求8所述的系統,其特征在于,所述任務處理單元還包括 判斷子單元,用于判斷所述線程池的緩存隊列是否已滿;監聽阻塞子單元,用于當所述線程池緩存隊列已滿時,阻塞所述第二預設隊列的監聽。
10.如權利要求6或9所述的系統,其特征在于,所述系統還包括任務寫入單元,用于當處理進入的定時器任務失敗時,將所述定時器任務寫入第三預設隊列中。
全文摘要
本發明適用于計算機技術領域,提供了一種定時器任務自動處理方法及系統,所述方法包括下述步驟循環監聽第一預設隊列中是否有定時器任務進入;當監聽到所述第一預設隊列中有定時器任務進入時,將所述定時器任務添加到第二預設隊列;循環監聽所述第二預設隊列是否有定時器任務進入;當監聽到所述第二預設隊列中有定時器任務進入時,調用對應的線程處理進入的定時器任務。本發明解決了現有技術無法實現定時器任務并發處理,系統資源的利用率低的問題,通過調用對應的線程對定時器任務進行處理,提高了任務的并發處理能力,進而提高了系統資源的利用率。
文檔編號G06F9/48GK102426539SQ20111034170
公開日2012年4月25日 申請日期2011年11月1日 優先權日2011年11月1日
發明者徐波, 李坤保, 肖海濤 申請人:深圳市航天泰瑞捷電子有限公司