1. 程式人生 > >web---如何實現servlet的單執行緒模式?

web---如何實現servlet的單執行緒模式?

預設情況下servlet是可以併發處理請求的。如果多個請求同時訪問某個servlet,這
時伺服器會啟動多個執行緒分別處理這些請求,並呼叫同一個servlet例項中的service
方法,這就要求servlet實現時需要考慮執行緒安全問題。

由於servlet例項的唯一性,如果在servlet中使用了靜態變數(存在方法區中)或成員變數(存在堆中),那麼它們
就可能會成為臨界資源,多執行緒下就會有併發問題。

一種較好的解決方法是:servlet中避免使用靜態變數和成員變數,只允許使用方法
內區域性變數。

一種不好的解決方法是:讓servlet實現SingleThreadModel 介面,這樣做web容器
會讓servlet中的方法僅能被單執行緒序列訪問,併發性大大降低。不論這種方法的優
劣,具體程式碼是:

public class MyServlet extends HttpServlet implements SingleThreadModel {
...
}