2012-03-12 42 views
0

Tomcat(6)允許在server.xml中的Executor元素中定義線程池。是否可以在應用程序代碼中使用ExecutorService這樣的線程池?當然,我可以在Servlets/ServletContextListener/Spring /中創建自己的線程池,但是在部署描述符中配置線程數等等對我來說似乎更好。在應用程序代碼中使用Tomcats配置的執行程序?

更新:我的想法是配置一個單獨的執行程序元素,只在應用程序內使用此線程池,但不在tomcats自己的組件中。這樣它可能不會干擾tomcat本身。

回答

1

您的問題似乎有點不清楚......

server.xml中執行人元素定義whitch是其中Tomcat的組件共享,如連接器,調度程序等一個線程池(例如HTTP連接) 。最好不要將自己的任務添加到服務器內部的ThreadPool中,否則可能會危及服務器的穩定性,並且會「硬連線」到Tomcat xy。

如果想讓Tomcat來控制你自己的線程池的線程,可以說你有開發的創新一個Tomcat和一個生產模式不同的核心池大小,你可以在服務器端配置的上下文參數做到這一點:

在server.xml中:

<server> 
    ... 
    <host ...> 

    <Context docBase="MyApp" path="/MyApp" reloadable="true"> 
     <Parameter name="numberOfThreadsOnThisTomcat" value="50"/> 
    </Context> 

    </host> 
</server> 

檢索值在你的應用程序使用:

getServletContext().getInitParameter("numberOfThreadsOnThisTomcat") 

欲瞭解更多信息看看這裏:http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Context_Parameters

請記住,這個參數可能不會自動部署後存在。

如果您想對您進行完整的程序控制Tomcats的行爲,您可以更好地使用Embedded Tomcat並運行您的應用程序(例如Liferay Portal)。看到這裏:http://tomcat.apache.org/download-70.cgi#7.0.26

+0

我的想法是配置一個額外的Executor元素,而不是在tomcat組件中使用它,而只在應用程序中使用它來執行後臺任務。這樣的應用程序不能妥協的tomcats穩定性,可以嗎? – 2012-03-13 08:05:19

0

爲什麼我們應該害怕,不要使用tomcat執行器?

它被稱爲執行者!不是別的。理想情況下,一旦將ExecutorService配置爲CPU內核的數量,那麼如果所有代碼都處於異步模式,則所有程序都應該使用相同的執行程序服務。鑑於並非所有的代碼都處於異步模式,因此相對於CPU內核使用更大的數字。無論如何,每個組件都無法使用自己的執行程序服務。

你多久寫一段帶死循環的代碼?

因此,從webapp中,我們如何訪問servlet容器所使用的執行程序,如tomcat?

一個解決方案應該指定一個自定義執行程序並替換server.xml中的默認org.apache.catalina.core.StandardExecutor,然後即使通過一個靜態變量,webapps也可以訪問它,因爲該執行程序是自定義的。

相關問題