Java Web应用程序中的线程

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

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

  index.jsp  

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

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

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

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

  • 的Weblogic
  • 的Websphere
  • Tomcat,Jboss和其他可能