我需要创建一个线程来侦听新的,修改过的或删除过的文件的文件路径。我正在使用一个使用Spring 3,Struts 2和Hibernate 3的Web应用程序。如果我运行该项目,它会加载index.jsp,其中包含文本“Hello World”。
问题在于,当我创建一个侦听文件路径并将其分配给index.jsp的java Thread()
时:
<action name="" method="runThread" class="TestThreadBean">
<result>index.jsp</result>
</action>
然后“Hello World”文本才会出现,因为Thread永远不会停止(这是正确的,它不应该停止)。我需要此Thread在后台运行,而不会干扰Web应用程序的其余部分。我不想仅为此线程创建单独的Web应用程序。此外,我不希望每次创建new
会话实例时都创建new
线程实例,无论有多少会话实例活动,都应该只有一个Thread实例。
答案 0 :(得分:7)
基本上,人们建议不要在容器管理的应用程序中启动自己的线程,比如Web应用程序或企业(EJB)应用程序。
这是因为在容器环境中,包括线程在内的所有资源都应该由容器管理。但恕我直言,如果你知道我们自己的线程及其资源的含义,生命周期,比如用事务等包装这个线程,那么我们可以使用标准方式(new Thread()
)创建一个线程,但它只是我的意见。
我建议你在做出决定之前先通过'容器管理线程'。您可以参考commonJ一次以获取Container的线程池的句柄,但由于这不是标准或容器规范中未提及,它可能不适用于所有容器。这适用于: