如何从Java EE中启动多个线程?

我需要将调用扩展到Tomcat,并建议在内部启动线程。 有没有人需要这样做,如果有的话,他们提出了什么解决方案?

通常不鼓励在应用程序服务器中创建自己的线程,因为服务器应该管理线程以获得更好的可伸缩性。 如果容器对线程上下文中可用的内容做出假设,例如安全信息(例如,经过身份validation的主题),则也可能遇到问题。 如果您生成一个线程然后使用该容器未知的该线程的服务器资源,通常会发生这种情况。

检查是否有办法从Tomcat获取容器管理的线程。 WebLogic和WebSphere支持commonj.WorkManager,它允许您安排容器管理线程的工作。 Spring也可以使用commonj,但我不确定Tomcat上是否有这种支持。

除非您有非常具体的需要,否则不应该从Web应用程序中真正启动线程。 如果没有关于您的问题的更多细节,很难说这是否是解决问题的正确方法。

您可能需要查看Quartz ,它是一个function齐全的开源作业调度系统,可以与几乎任何J2EE或J2SE应用程序集成或一起使用

你的问题有点模糊。 Tomcat本身已经使用线程池来为HTTP请求提供服务。 您可以通过Tomcat配置增加线程数 – 请查看Tomcat wiki以获取相关信息。

如果你的意思是在你的代码中想要启动线程,那么我建议仔细阅读Java 5中引入的java.util.concurrent API。另请阅读“Java Concurrency in Practice”,这是关于这个主题文本。

您尝试使用线程解决的问题是什么?

如果有长时间运行的任务,则应使用JMS +完整的Java EE容器。

如果您尝试处理多余的负载,可以考虑两个tomcat实例,但是,如果您使用的是http会话,则需要调查会话复制。

如果您被迫使用Tomcat,请考虑在java.util.concurrency使用Executors框架。

正如其他人所问,你应该提供更多关于你想要完成的事情的细节。

否则,tomcat使用线程池。 增加池中的线程数。 使用更新版本的tomcat – 6.x. 使用Java 6.0_10。 如果需要,可以使用分析器调整应用程序,并根据需要调整JVM设置。

托管multithreading的J2EE抽象是JCA 。 特别是,请查看WorkManager和Work类。 另见这个穗 。 Spring还提供了JCA支持的工作管理器抽象。