繁体   English   中英

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

[英]How do you launch multiple threads from within Java EE?

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

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

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

你的问题有点模糊。 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框架。

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

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

正如其他人所问,你应该详细说明你想要完成的事情。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM