項目中需要解決一個這樣的問題:有兩個業務均需要每隔幾秒觸發一次,但是兩個業務都只是在規定的時間區域內才進行該行為。比如,在早上八點到晚上六點為上班時間,在這個時間段內兩個業務必須每隔幾秒被執行一次,下班後則停止工作。
這個問題最開始我是想利用timer來解決,即做兩個timer,一個timer來控制一個事務,然後在各事務對應時間區域內執行。
但是考慮到Timer是在主線程裡執行的,Thread 是在自己的線程中執行的,在多核多線程的 CPU 中,利用Thread的效率高更高一些。而且後期事務變多,控制更復雜,用timer也不是很利於擴展。所以最後決定使用多線程來解決該問題。
經過思考以及參閱類似案例,比如http://www.cnblogs.com/shuang121/archive/2012/07/05/2578033.html,最後將框架設計成如下結構:
a.兩個事務均涉及到數據庫的多數據增刪查改,為了保證數據的唯一性,對數據庫操作均采取事務型操作。
b.為了避免數據庫的重復連接和關閉,這裡盡量使用數據庫的長連接。同時,為了避免兩個事務共用一個數據庫連接而出現的問題,特地使用簡單的數據庫連接池進行處理。
c.為了連接池能被共享,對連接池所在類進行單例模式。