一尘不染

Java Web应用程序中的线程

tomcat

我需要创建一个线程来侦听新,已修改或已删除文件的文件路径。我正在使用一个使用Spring 3,Struts 2和Hibernate
3的Web应用程序。如果我运行该项目,它将加载包含文本“ Hello World”的index.jsp。

问题是当我创建一个Thread()侦听文件路径并将其分配给index.jsp 的java时:

<action name="" method="runThread" class="TestThreadBean">
     <result>index.jsp</result>
</action>

然后,“ Hello
World”文本永远不会出现,因为Thread永远不会停止(这是对的,它不应该停止)。我需要该线程在后台运行,并且不干扰Web应用程序的其余部分。我不想仅为此线程创建一个单独的Web应用程序。另外,我不希望new每次创建newSession实例时都创建一个Thread实例,无论有多少个Session实例处于活动状态,都应该只有一个Thread实例。


阅读 365

收藏
2020-06-16

共1个答案

一尘不染

基本上,人们会建议不要在容器托管的应用程序(例如Web应用程序或企业(EJB)应用程序)中启动自己的线程。

这是因为在容器环境中,包括线程在内的所有资源都应由容器管理。但是恕我直言,如果您知道我们自己的线程及其资源的含义以及其生命周期,例如用事务包装该线程等,那么我们可以使用标准方式(new Thread())创建一个线程,但这只是我的看法。

我建议您在做出决定之前,先检查一次“容器托管线程”。您可以一次引用commonJ来获取Container的线程池的句柄,但是由于这不是标准或未在容器规范中提及,因此它可能不适用于所有容器。这将适用于:

2020-06-16