Servlet是單實體的
生命周期的流程:創建物件–>初始化–>service()–>doXXX()–>銷毀
創建物件的時機:
1,默認是第一次訪問該Servlet的時候創建
2,也可以通過配置web.xml,來改變創建時機,比如在容器啟動的時候去創建,DispatcherServlet(SpringMVC前端控制器)就是一個例子1執行的次數物件的創建只有一次,單例初始化一次銷毀一次
關于執行緒安全構成執行緒不安全三個因素:
1,多執行緒的環境(有多個客戶端,同時訪問Servlet)
2,多個執行緒共享資源,比如一個單例物件(Servlet是單例的)
3,這個單例物件是有狀態的(比如在Servlet方法中采用全域變數,并且以該變數的運算結果作為下一步操作的判斷依據)
偽代碼,演示執行緒不安全的操作方式
public class MyServlet extends HttpServlet{
private int ticket = 100;
public void doXXX(){
if(ticket > 0){
? //......
ticket--;?
?}
?? } ?
}
所以,我們要避免在Servlet中做上述類似的操作!分析Servlet內部原始碼,關于Service對請求的分發處理邏輯,會呼叫相應的doXXX方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275110.html
標籤:其他
