我们知道静态变量是ClassLoader级别的,如果Web应用程序停止,这些静态变量也会从JVM中清除。但是线程则是JVM级别的,如果你在Web应用中启动一个线程,这个线程的生命周期并不会和Web应用程序保持同步。也就是说,即使你停止了Web应用,这个线程依旧是活跃的。正是因为这个很隐晦的问题,所以很多有经验的开发者不太赞成在Web应用中私自启动线程。
如果我们手工使用JDK Timer(Quartz的Scheduler),在Web容器启动时启动Timer,当Web容器关闭时,除非你手工关闭这个Timer,否则Timer中的任务还会继续运行!
要终止自己的线程,需要按照下面的文章,监听tomcat容器关闭的消息,终止线程的运行:
http://tech.it168.com/oldarticle/2007-04-25/200704251027015_2.shtml
robbin建议自己单独启动一个Job Server,来quartz跑job,不要部署在web容器中。
http://robbin.iteye.com/blog/40989?page=2
如果我们手工使用JDK Timer(Quartz的Scheduler),在Web容器启动时启动Timer,当Web容器关闭时,除非你手工关闭这个Timer,否则Timer中的任务还会继续运行!
要终止自己的线程,需要按照下面的文章,监听tomcat容器关闭的消息,终止线程的运行:
http://tech.it168.com/oldarticle/2007-04-25/200704251027015_2.shtml
robbin建议自己单独启动一个Job Server,来quartz跑job,不要部署在web容器中。
http://robbin.iteye.com/blog/40989?page=2
本文探讨了在Web应用中启动线程的潜在问题,特别是关于线程生命周期与Web应用不同步的情况。文章强调了线程及Timer组件的正确管理方式,并推荐将定时任务部署在独立的JobServer上。
3735

被折叠的 条评论
为什么被折叠?



