2013-02-08 72 views
0

我計劃在我的一個Web應用程序中使用executor框架進行後臺進程,如發送郵件和記錄詳細信息。當我開始閱讀有關Executor API時,我明白它提供了線程池設施。但我有一個想法,就像我們在Web應用程序中不需要線程池機制。因爲默認情況下,我的應用程序服務器控制線程輪詢和所有權利。所以我的觀點是,我們不需要在Web應用程序場景中實現線程池?這一點是對還是錯?關於Web應用程序環境中的Java Executor框架

+0

這是正確的,你不應該使用線程池或Web的應用程序正常情況下的任何其他線程。這由servlet容器管理得很好。更具體的答案需要更具體的問題。 – cybye

+0

感謝您的回答 – Dilip

+0

由於Java EE 7現在有一個'ManagedExecutorService',它是SE ExecutorService的EE模擬器。它被設計用於'託管環境',即通過運行在EE服務器上的應用程序。 – mancini0

回答

3

它取決於您指的是哪個線程。

用於處理進入應用程序服務器的請求的線程由容器自身處理。你不必擔心這一點。但是,如果您的應用程序需要處理由請求啓動的較長任務,並且您希望快速響應請求,則可以讓線程處理這些任務。爲此,您可以在application startup上啓動多個線程,並在需要運行較長任務時使用它們。 See this

+0

在任何情況下,父線程(即由應用程序服務器啓動)將運行,直到子線程(使用執行程序啓動我的應用程序)完成或不是? – Dilip

+0

主線程,是的。不是處理請求的人。該任務將並行運行,並在任務運行時完成處理請求。 – stepanian

+0

提示:確保在Web應用程序的'ServletContextListener :: contextDestroyed'方法中關閉執行程序,否則執行程序的線程將在您的Web應用程序關閉後繼續存在。然後你有殭屍線程,永無止境,但沒有目的。 –

-2

這是不正確的。應用程序服務器管理自己的線程池,但由執行程序框架創建的線程不受應用程序服務器管理。

1

服務器容器提供的運行時支持爲Java EE應用程序部件

(如servlet和企業JavaBeansTM(EJBTM))

。它們在應用程序組件代碼和平臺服務和資源之間提供了一個層。所有應用程序組件代碼都運行在由容器管理的線程上,每個容器通常都希望容器提供的對象的所有訪問都發生在同一個線程上。

正是由於此行爲,應用程序組件通常無法可靠地使用來自未由容器管理的線程的其他Java EE平臺服務的Java EE產品供應商也打消了在非託管的方式利用資源,因爲它可能會破壞該平臺旨在提供企業級功能,如

可用性,安全性和可靠性,可擴展性。

入住這link

相關問題