2012-09-27 39 views
3

Tomcat使用線程池並重用線程 我想知道它是否在跨會話或跨請求重用線程Tomcat中的線程重用

+0

你的意思是'重用會話中的請求對象嗎? – turtledove

+0

@turtledove:更新OP – Jim

+0

你是指'重用線程acrss會話還是跨請求?無論如何,我不應該對線程做任何假設。唯一有效的假設是'只有一個線程會處理我的請求,然後將等待更多的工作' – helios

回答

4

跨越請求和會話。一切。如果一個線程不能被不同的會話使用,你的服務器會在幾秒/分鐘內崩潰,當有300個用戶獲得他們的會話ID(並保留相應的線程)並且用戶號碼301想訪問時。

把它看成是:

server waiting for request: 
on request: 
    obtain free thread from pool 
    put that thread to process request (by example: doGet(Req, Resp)) 
    when finished return thread to pool 

到服務器的每個請求(來自誰是)由該池中的第一無螺紋加工。

2

Apache Tomcat Configuration Reference狀態如下。

Executor表示可以在Tomcat中的組件之間共享的線程池。歷史上出現了每創建連接器的線程池,但這可以讓你分享一個線程池,(primarly)連接器,還包括其他組件之間當那些獲得配置爲支持執行人

+2

這是否意味着不同的上下文可以共享相同的線程。也可能泄漏線程局部變量。 –