Servlet須知--如何使Servlet線程安全

 Servlet 定義中並未表明是單例,只不過Servlet Container只會對每一個Servlet創建一個實例。每個獨立的線程服務一個請求,這樣來處理併發。如果希望Servlet Container創建過個實例處理高負載請求,可以實現SingleThreadModel(Servlet2.4之後不建議使用)。

Servlet Container創建一個Servlet實例來併發處理所有請求,這樣減少了內存消耗,同時使持久化數據的管理更加簡單。

使用Servlet時,需要注意:

1.局部變量是線程安全的(由於併發的原因,實例變量難以保證一致性,當然可以使用同步鎖來控制,不過這樣效率會大受影響)

2.不變對象是線程安全的,如下:

public Class Player

{

private String name;

private String number;

public Player(String name, String number)

{

this.name = name;

this.number = number;

}

public String getName()

{

return this.name;

}

public String getNumber()

{

return this.number;

}

}

也許你已經注意到,這裏沒有使用set方法來對域進行復制,這正是刻意而爲之。生成對象時,對屬性進行復制,之後不再修改,這樣的對象在servlet使用中是線程安全的。

3.提供資源唯一入口點(這樣會減少併發帶來的危險)

.....

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章