爲什麼我們需要實現單線程模式在Servlet的情況下?爲什麼我們需要在Servlet的情況下實現單線程模型?
回答
我認爲它已經被廢棄,但是,原本一個servlet處理多個併發請求,每個在自己的線程。通過對servlet進行註釋,您可以將請求集中到串行處理中,因爲servlet只允許一個線程處理其所有請求。
但正如我所說,它現在已經過時了,你不應該使用它。如果你有特殊的同步需求,您應該手動處理它..
該servlet程序員應該實現SingleThreadModel接口確保servlet可以同時處理只有一個請求。
如果你讀了Java Servlet Specification,你會發現問題的答案。這裏有多個部分解釋線程問題。例如:
第2.3.3.1節。多線程問題
一個servlet容器可能通過servlet的服務 方法發送併發請求。爲了處理這些請求,Servlet Developer 必須爲在服務方法中與多個 線程同時處理做出適當的規定。
儘管不推薦,爲開發一種替代方法是 實現這需要容器 保證只有一個在 服務方法的時間請求線程SingleThreadModel接口。一個servlet容器可以通過 序列化一個servlet上的請求,或者通過維護一個servlet實例池來滿足這個要求。如果servlet是標記爲可分發的 的Web應用程序的一部分,那麼容器可以在應用程序分佈的每個JVM中維護一個servlet實例池。
對於未實現SingleThreadModel接口的servlet,如果 服務方法(或方法,諸如的doGet或doPost其是 分派到的HttpServlet抽象類的服務方法) 已經與同步關鍵字定義中,servlet容器 不能使用實例池方法,但必須通過它來序列化請求 。強烈建議開發人員不要在這些 的情況下同步 服務方法(或派發給它的方法),因爲這會對性能產生不利影響。
而且這一部分。
第2.3.3.4:線程安全
除了startAsync和完整的方法,在 請求和響應對象的實現不保證線程安全的。 這意味着它們只能在 的範圍內使用請求處理線程或應用程序必須確保訪問 的請求和響應對象是線程安全的。
如果由應用程序創建的線程所使用的容器管理 對象,諸如請求或響應對象,這些對象必須是 僅在對象的生命週期訪問如在章節3.10 和5.6所定義。請注意,除了startAsync和完整的方法以外,請求和響應對象不是線程安全的。如果 這些對象被多個線程訪問,該訪問應該 同步或通過包裝來完成添加的線程安全, 例如,同步的方法調用訪問 請求屬性,或者使用本地輸出流爲線程內的響應 對象。
在規範的其餘部分中還有更多類似的評論,似乎表明如果確保代碼不需要任何類型的同步,您可能會更好。
- 1. 在什麼情況下,我們需要調用GC.Collect兩次
- 2. 在什麼情況下我們需要使用`multiprocessing.Pool.imap_unordered`?
- 3. 在什麼情況下,我們應該實現Iprincipal和IIdentity
- 4. 在這種情況下模型之間需要什麼關聯?
- 5. 爲什麼,在什麼情況下,我們應該在spring mvc中使用多個servlet而不是單個servlet?
- 6. 爲什麼我們在這種情況下需要Publish和RefCount Rx操作符?
- 7. 爲什麼我需要在這種情況下演員陣容?
- 8. 爲什麼我需要在這種情況下施放?
- 9. 模型中有什麼?爲什麼我們需要使用它
- 10. 在哪種情況下,我們需要創建一個新的線程?
- 11. 爲什麼我們需要長型?
- 12. 在iPhone中使用線程,在這種情況下我需要它們嗎?
- 13. 爲什麼我們需要在ImagePickerController中實現UiNavigationcontroller委託iphone
- 14. 爲什麼我們要實現接口?
- 15. 爲什麼我在這種特殊情況下不需要模板參數?
- 16. 爲什麼CoffeeScript在下列情況下需要括號?
- 17. 在什麼情況下我們需要double,float和long double的函數?
- 18. 爲什麼Streams API在這種情況下需要泛型類型的提示?
- 19. 爲什麼我需要我需要在子類中實現IDisposable()
- 20. 爲什麼我們需要在MongoDB中定義數據模型
- 21. 爲什麼我們需要在appendPixelBuffer之後暫停線程:withPresentationTime:?
- 22. 爲什麼jquery在覆蓋的情況下需要_ $?
- 23. 爲什麼在這種情況下需要額外的檢查?
- 24. 在什麼情況下我們需要使用gson來反序列化領域?
- 25. 爲什麼我們需要爲每個線程使用NSAutoreleasepool?
- 26. 爲什麼在某些情況下需要將#放在Lisp中?
- 27. 爲什麼SaveChanges()方法在我的情況下需要這麼長時間?
- 28. 我不知道爲什麼會出現在我的情況下
- 29. 爲什麼我們真的需要多個netty boss線程?
- 30. 我需要在這種情況下使用什麼類型的UML圖?