web的任务调度

本文探讨了在Web应用中启动线程的潜在问题,特别是关于线程生命周期与Web应用不同步的情况。文章强调了线程及Timer组件的正确管理方式,并推荐将定时任务部署在独立的JobServer上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道静态变量是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值