我需要从 JSP 创建一个新线程。在 JSP 中生成线程是个好主意吗?
有没有其他方法?
It is 绝对不在 JSP/Servlet Web 应用程序中手动生成非托管线程是一个好主意。当然不是在 JSP 端完成,因为它在任何方面都不符合 JSP 的职责。
线程是一种相对危险的资源,需要格外小心地对待。想象一下,您的 JSP 在每个请求上生成一个新线程,那么您的 Web 服务器将在(例如)1000 个请求后被终止。你需要重新启动它。
即使您在每个用户的基础上正确控制线程的使用和终止,您仍然需要确保单个访问者不能在会话范围内生成多个线程。但是,当您有 1000 个并发会话时,您的服务器仍然会被终止。
您需要一个应用程序范围的共享线程池,而不是最多锁定 10~20 个线程或其他线程。通常,一个像样的 Java EE 容器已经提供了它。您需要检查其管理控制台和/或手册以了解如何配置和使用它。您最终还可以自己创建一个线程池,例如ExecutorService
in a ServletContextListener
,但是您应该真正了解线程的工作原理以及如果您做错了会产生什么影响。
以下是几个相关问题,可以从中获得一些想法:
- JSP/Servlet Web 应用程序中的后台计时器任务 https://stackoverflow.com/questions/5357033/background-timer-task-in-jsp-servlet-web-application
- 如何在基于 servlet 的 Web 应用程序中运行后台任务? https://stackoverflow.com/questions/4691132/how-to-keep-the-servlet-continously-running
- 在 Tomcat 中从 servlet 生成线程的推荐方法是什么 https://stackoverflow.com/questions/3745905/what-is-recommended-way-for-spawning-threads-from-a-servlet-in-tomcat
- 在 JSF 托管 bean 中启动新线程是否安全? https://stackoverflow.com/questions/6149919/is-it-safe-to-start-a-new-thread-in-a-jsf-managed-bean
- 使用计时器在 JSF 托管 Bean 中为计划任务生成线程 https://stackoverflow.com/questions/7499534/applicationscope-bean-that-uses-a-timertask-sheduler-good-or-bad
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)