2012-06-28 44 views
1

可能重複:
Why is (javax.servlet.)SingleThreadModel deprecated?什麼是落後Servlet的設計原理是辛格爾頓

servlet容器「一般」創建一個servlet的一個實例,同一個實例的不同的線程來服務多個請求。 (我知道這可以改變使用不推薦的SingleThreadModel和其他功能,但這是通常的方式)。

我認爲,背後的一個簡單原因就是性能提升,因爲創建線程比創建實例要好。但似乎這不是原因。另一方面,創建實例幾乎沒有優勢,開發人員不必擔心線程安全。

我想了解在線程安全權衡這個決定的原因。

+0

你是什麼意思「同一實例的不同線程」。你在談論servlet處理程序線程池? – Gray

+6

http://stackoverflow.com/questions/2551999/why-is-javax-servlet-singlethreadmodel-deprecated – kosa

+0

@Gray是的,我正在談論servlet處理程序線程池。 –

回答

1

請注意,SingleThreadModel不能解決所有線程安全問題。 例如,即使在使用SingleThreadModel servlet時,會話屬性和靜態變量仍然可以同時被多個線程上的多個請求訪問 ,即 。建議開發人員採取其他方式來解決這些問題,而不是實現此接口的 ,例如避免使用變量實例 或同步訪問那些 資源的代碼塊。

欲瞭解更多信息請參閱this thread

3

這是關於性能。如果沒有狀態,就沒有鎖定和爭用。 Servlets是基本的構建模塊,建立在狀態的假設上並不是那個級別上的好主意。

servlet只是一種說法,容器收到了這個請求,這裏是應用程序對它做某些事情的一個機會。任何關於需要什麼樣的狀態性的假設都可能適用於某種應用程序,並且對其他應用程序不利,所以servlets會對此加以利用。如果在工作中有一個通用的設計原則,它會保持足夠簡單的通用性。