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


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

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/

                                                                                   如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM