我需要将调用扩展到Tomcat,并建议在内部启动线程。有没有人需要这样做,如果有的话,他们提出了什么解决方案?
答案 0 :(得分:5)
通常不鼓励在应用程序服务器中创建自己的线程,因为服务器应该管理线程以获得更好的可伸缩性。如果容器对线程上下文中可用的内容做出假设,例如安全信息(例如,经过身份验证的主题),则也可能遇到问题。如果您生成一个线程然后使用该容器未知的线程中的服务器资源,则通常会发生这种情况。
检查是否有办法从Tomcat获取容器管理的线程。 WebLogic和WebSphere支持commonj.WorkManager,它允许您安排容器管理线程的工作。 Spring也可以使用commonj,但我不确定Tomcat上是否有这种支持。
答案 1 :(得分:1)
你的问题有点模糊。 Tomcat本身已经使用线程池来为HTTP请求提供服务。您可以通过Tomcat配置增加线程数 - 请查看Tomcat wiki以获取相关信息。
如果您的意思是在您的代码中想要启动线程,那么我建议仔细阅读Java 5中引入的java.util.concurrent API。另请阅读“Java Concurrency in Practice”,这是 关于这个主题的文字。
答案 2 :(得分:1)
您尝试使用线程解决的问题是什么?
如果有长时间运行的任务,则应使用JMS +完整的Java EE容器。
如果您尝试处理多余的负载,可以考虑两个tomcat实例,但是,如果您使用的是http会话,则需要调查会话复制。
如果您被迫使用Tomcat,请考虑使用java.util.concurrency
中的Executors框架。
答案 3 :(得分:1)
除非您有非常具体的需要,否则不应该从您的webapp中启动线程。如果没有关于您的问题的更多细节,很难说这是否是解决问题的正确方法。
您可能需要查看Quartz,其中“是一个功能齐全的开源作业调度系统,可以与几乎任何J2EE或J2SE应用程序集成或一起使用< / EM>”。
答案 4 :(得分:0)
正如其他人所问,你应该详细说明你想要完成的事情。
否则,tomcat使用线程池。增加池中的线程数。使用更新版本的tomcat - 6.x.使用Java 6.0_10。如果需要,可以使用分析器调整应用程序,并根据需要调整JVM设置。
答案 5 :(得分:0)
托管多线程的J2EE抽象是JCA。特别是,请查看WorkManager和Work类。另见this arcicle。 Spring还提供了JCA支持的工作管理器抽象。