2014-03-31 44 views
2

根據java文檔,它說如果使用SingleThreadModel,則創建並使用一個servlet實例有兩種方式 1.創建一個servlet實例並使service()方法同步,因此只允許一個線程執行服務方法。 2.創建一個servlet池並通過爲每個請求使用池中的一個servlet實例來提供請求。使用SingleThreadModel時servlet的生命週期管理

我想問的問題是我也讀過一個新的Servlet實例創建和銷燬每個請求。現在,哪一個是正確

+0

你能分享引用的在線文檔/書 – spiderman

回答

0

這裏的規範說什麼(3.0版,2.2節):

對於在分佈式環境中(默認值)不舉辦一個servlet,servlet容器只能使用一個實例每個servlet聲明。但是,對於實現SingleThreadModel接口的Servlet,servlet容器可以實例化多個實例來處理沉重的請求負載並將對特定實例的請求序列化。

如果servlet部署爲部署描述符中標記爲可分發的應用程序的一部分,則每個Java虛擬機(JVMTM)1每個servlet聲明只能有一個實例。但是,如果可分發應用程序中的servlet實現SingleThreadModel接口,則容器可以在容器的每個JVM中實例化該servlet的多個實例。

請注意,您應該不使用單線程模型。只要確保你的servlet是thread-sae。一個servlet通常是無狀態的,所以你不需要做任何事情來使其線程安全。

+0

爲什麼downvote? –

+0

我喜歡你的答案。 +1從我身邊。如果你有時間,你能詳細說明一下你在這裏給出的答案:http://stackoverflow.com/questions/8687765/servlet-synchronization-when-multiple-instances?rq=1# –

0

從文檔爲SingleThreadModel

確保servlet的同時

這在本質上是一種方法,使非線程安全的servlet代碼工作只處理一個請求。需要注意的是,容器可以自由選擇任何兩個實現的堅持規格:

  1. 創建servlet的一個實例,並確保它在一個時間
  2. 只處理一個請求創建池servlet實例並將請求移交給可用的servlet實例。
相關問題