利用多線程解決多業務不一樣定時區間歇觸發問題的一種方法

 文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/html

1.背景

項目中須要解決一個這樣的問題:有兩個業務均須要每隔幾秒觸發一次,可是兩個業務都只是在規定的時間區域內才進行該行爲。好比,在早上八點到晚上六點爲上班時間,在這個時間段內兩個業務必須每隔幾秒被執行一次,下班後則中止工做。數據庫

2.思路

這個問題最開始我是想利用timer來解決,即作兩個timer,一個timer來控制一個事務,而後在各事務對應時間區域內執行。微信

可是考慮到Timer是在主線程裏執行的,Thread 是在本身的線程中執行的,在多核多線程的 CPU 中,利用Thread的效率高更高一些。並且後期事務變多,控制更復雜,用timer也不是很利於擴展。因此最後決定使用多線程來解決該問題。多線程

通過思考以及參閱相似案例,好比http://www.cnblogs.com/shuang121/archive/2012/07/05/2578033.html,最後將框架設計成以下結構:框架

                       

3.具體實現

3.1 IshedulerJob

 

3.2 Job

 

3.3SchedulerConfiguration

 

3.4Scheduler

 

3.5 viewer

 

4. 優化

a.兩個事務均涉及到數據庫的多數據增刪查改,爲了保證數據的惟一性,對數據庫操做均採起事務型操做。優化

 

b.爲了不數據庫的重複鏈接和關閉,這裏儘可能使用數據庫的長鏈接。同時,爲了不兩個事務共用一個數據庫鏈接而出現的問題,特意使用簡單的數據庫鏈接池進行處理。線程

 

c.爲了鏈接池能被共享,對鏈接池所在類進行單例模式。設計

 

 

                                                                                     -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/3d

                                                                                   若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^htm

                                        

相關文章
相關標籤/搜索