1

我需要创建一个线程来监听新的、修改的或删除的文件的文件路径。我正在使用一个使用 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”文本永远不会出现,因为线程永远不会停止(这是正确的,它不应该停止)。我需要这个线程在后台运行并且不干扰 Web 应用程序的其余部分。我不想只为这个线程创建一个单独的 Web 应用程序。另外,我不希望new每次创建newSession 实例时都创建一个 Thread 实例,无论有多少 Session 实例处于活动状态,都应该只有一个 Thread 实例。

4

1 回答 1

7

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

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

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

于 2012-07-18T12:12:12.083 回答