還是用實際的專案來舉個栗子。
作為資料服務,入口是乙個webservices的介面,這裡因為歷史原因,還是採用soap方式。
入口如下:
@webmethod
public feedresult send(nocpacket nocpacket)
這裡採用生產者和消費者的模式,其中的const.nocqueue,是我們的blockingqueue,作為資料緩衝區。
既然如此,還應該有乙個消費者。
之前說過,我們要在系統啟動的時候,就去queue中取我們的資料,有則拿出來,作為業務處理,沒有則阻塞,等待資料到來。同時,拿到資料後,將這些資料入庫。
這裡需要兩個類,乙個是隨系統一起啟動的,暫且叫守護程式吧。另乙個是做主業務的。
守護程式**:
/**
* created by wl on 15-6-17.
* 業務消費者
*/@component
public class business
}
處理業務的類:
/**
* created by wl on 15-6-17.
* 業務處理主方法
*/public class busitask implements callable>
public blockingqueuecall() throws exception
}
此處,守護程式是隨系統一起啟動的,這一點可以用spring配置。這個守護程式不能有特殊性,它不能是我們自建的乙個執行緒,也不能new乙個方法,再去呼叫dobusi,因為這樣就不受spring管理了。它的第乙個目的是拿到注入的service。
這兩個類,採用future和callable的方式進行非同步執行緒處理的。如果直接去處理busitask中的任務,就會阻塞到queue的take上。同時,通過守護程式,busitask也可以拿到services,進行入庫等操作。
spring是可以進行多執行緒開發的,目前沒使用過,以後有時間好好研究下。
spring 多執行緒
一 threadpooltaskexecutor threadpooltaskexecutor的配置在網上找了很多解釋沒找到,看了下threadpoolexecutor的配置,名字差不多,應該含義也差不多。只不過threadpooltaskexecutor對 threadpoolexecutor做了...
Spring系列(五)Spring的多執行緒
spring通過任務執行器 taskexecutor 來實現多執行緒和併發程式設計。使用thredpooltaskexecutor可以實現基於執行緒池的taskexecutor。為了實現非同步任務,可以在配置類中通過 enable開啟對非同步任務的支援,並通過實際執行的bean的方法使用 async...
spring多執行緒事務控制
主要測試內容是兩個執行緒同時對乙個表操作時,後乙個ccc類中的select之後commit,是否會對aaa類的insert操作rollback產生影響。測試結果是互不影響。spring xml 配置檔案 xmlns xsi xsi schemalocation spring beans 3.0.xs...