2013-02-08 52 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

相关问题