1. 程式人生 > >Jersey(servlet)的執行緒安全

Jersey(servlet)的執行緒安全

#Jersey的控制器是單例的,因此需要保證多個請求到來時出現多執行緒併發訪問Controller.


處理併發的方法:
 
 - 1.類的訪問域的所有成員都採用不可變的(只讀)。
 - 2.對可變的成員加鎖(保證被訪問的成員執行緒安全)。
 - 3.採用無狀態。


 對於控制層我們採用第二種方案。(第一種,我們很難保證服務層的成員只讀,因為他是業務邏輯層第三種,也可行,只是說我們最終還是得解決執行緒安全問題,而且我不打算在控制器去採用無狀態策略,因為無狀態,會使得我們在控制器的方法裡面new很多服務類,導致資源浪費。)
 第二種方案使得控制層的執行緒共用服務類,並且服務類是執行緒安全的。
 
 那麼,服務層的類怎麼保證執行緒安全呢?
 採用第三種方案,讓服務類無狀態,即,讓服務類沒有引數。
 
 而DAO在需要用到的時候才在方法裡面去NEW(或者說dao是多例的,從而避免的考慮執行緒安全問題)