2010-01-19 84 views
9

我想知道是否有人可以向我解釋Java Servlets的線程模型? 據我瞭解,只有一個servlet實例可以存在於servlet容器中,並且如果多個線程恰好在等待該servlet,那麼請求會以某種方式被序列化。 我不知道如何序列化過程發生...Java Servlets線程模型

有人可以解釋它嗎?

回答

11

如果請求是由servlet串行處理的,那麼web應用程序將非常緩慢。實際上,servlet需要是線程安全的,因爲servlet的單個實例可以負責同時處理多個請求。

通常,Web應用程序容器將維護用於處理請求的線程池,並且按請求將傳入請求分配給線程。

+0

在此先感謝答覆danben! 但我還有一件事要澄清。 線程安全意味着servlet中沒有內部狀態維護。因此任何駐留在池中的servlet實例都與創建時的狀態相同。 我正確嗎? 謝謝! – 2010-01-19 17:30:33

+2

沒有內部狀態的類是線程安全的,但它不是線程安全的唯一方法。線程安全本身是一個長時間的討論,但是例如,如果一個具有內部狀態的類可以訪問其內部狀態,則它可以是線程安全的。 – danben 2010-01-19 17:31:31

+1

Servlets也必須是線程安全的,因爲它們與其他Servlet(存儲在ServletContext和HttpSession中的對象)共享狀態信息 – 2010-01-19 17:54:05

1

從歷史上看,您有兩種型號,具體取決於您的Servlet。如果Servlet實施了SingleThreadModel,那麼排隊的請求。否則,現在這是唯一的模型,Servlet必須能夠同時處理多個請求。所以在這個模型中沒有排隊,除非容器有一定的速率限制功能。

0

是的,有一個接口單線程模型。它是一個標記接口。 它使servlet的這個對象同步,即一次只有一個線程爲對象提供服務,但它會產生類似響應延遲的問題。對於解決方案,它們創建對象池,但池的大小也有限。因此,最好使用同步塊