回答
javadoc說明了原因。 SingleThreadModel
被設計成一個簡單的解決方案,以低負載併發性,但它甚至沒有管理的是:
注意SingleThreadModel並沒有提供 解決所有的線程安全問題。對於 例如,會話屬性和靜態變量 仍然可以通過在多個線程 多個請求同時訪問,即使使用 了SingleThreadModel的servlet。 建議顯影劑 採取其他手段來解決,而不是實現此 接口,如避免使用一個實例變量的 或 同步訪問這些資源的代碼 的塊那些 問題。
如果無法達到設計目的,則不應使用。
這基本上是一種很差的處理併發的方式。相反,請將狀態從您的servlet中取出,以便多個線程可以同時使用同一個servlet。將狀態保持在servlet實例的「池」中,每個實例都可以具有從先前請求中遺留下來的狀態,這非常可怕。
從Java Servlet規範:
使用SingleThreadModel接口保證只有一個 在一個時間線將在一個給定的servlet實例的服務 方法執行的。值得注意的是,這個保證只適用於每個servlet實例的 ,因爲容器可能會選擇合併這樣的對象。一次可以訪問多個servlet實例 的對象(例如HttpSession實例)可以在特定時間到達多個servlet,包括實現 SingleThreadModel的那些。
建議顯影劑採取其他手段來解決這些問題,而不是實現該接口,如避免 一個實例變量的使用或同步 代碼訪問這些資源的塊的。 SingleThreadModel接口在本版本的規範中已棄用 。
是不推薦使用SingleThreadModel接口。不要使用它。事實上,你並不需要它,而是使用局部變量而不是對象字段,因爲「每個線程都在Java中獲取自己的局部變量副本。通過簡單地刪除對象字段並用局部變量替換它,這個特定的線程問題已解決。「 Reference
- 1. 爲什麼MapMaker.softKeys()已棄用?
- 2. 爲什麼/ Wp64棄用?
- 3. 爲什麼ProviderSignInUtils.getConnection已棄用
- 4. 爲什麼TableOutputForma棄用?
- 5. 爲什麼buildSessionFactory()已棄用?
- 6. 爲什麼Cursor.requery()標記爲「已棄用」?
- 7. 爲什麼QuickCheck放棄?
- 8. 什麼可以代替javax.servlet-api-3.1.0.jar
- 9. 爲什麼在Node.js中棄用域API?
- 10. 爲什麼#import已被棄用?
- 11. 爲什麼%b在Printf中棄用?
- 12. 爲什麼TabListener已被棄用?
- 13. 爲什麼InstanceMethods模塊已被棄用?
- 14. 爲什麼absolutelayout已被棄用?
- 15. 爲什麼Java插件被棄用
- 16. 爲什麼GenFsm已被棄用?
- 17. 爲什麼getResources()。getColor(int)已棄用?
- 18. PostMethod setRequestBody(String)已棄用 - 爲什麼?
- 19. 爲什麼render_component已被棄用?
- 20. 爲什麼Catalyst :: Helper :: View :: TTSite棄用?
- 21. 爲什麼要bind()被棄用?
- 22. css:爲什麼**顏色:紅**棄用?
- 23. 爲什麼create = dynamic已被棄用?
- 24. 爲什麼sun jdk源代碼不包含javax.servlet包?
- 25. 爲什麼Jersey 2.22在Jersey包中包含「javax.servlet-api-3.0.1」?
- 26. 爲什麼event.returnValue已被棄用?這是什麼意思?
- 27. 爲什麼buildSessionFactory在Hibernate中被棄用,爲什麼要使用ServiceRegistry?
- 28. 爲什麼這會在UIlabel上放棄?
- 29. Android Studio爲什麼放棄apk安裝?
- 30. 爲什麼我放棄了iframe的src?