Tomcat重启后,之前的进程会完全关闭么?

KlausV587 2014-09-24 12:24:17
这两天在工作中遇到一个问题想请教各位大神!

项目里每次重启的时候会扫描数据库然后新建一些计时器Timer,这些计算器自动倒计时去完成一些任务。假如我在Tomcat运行中修改了配置文件,并且重启了Tomcat。按道理之前的Timer都会被取消掉,Tomcat重启的时候会创建新的Timer。

有没一种可能就是当我修改Tomcat里面的配置,Tomcat自动reload,之前的Timer没有被完全取消,而且还创建了新Timer。
...全文
415 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
KlausV587 2014-09-25
  • 打赏
  • 举报
回复
谢谢楼上两位的回复! 我在网上也找到了类似的文章: http://blog.csdn.net/weekly123/article/details/1587853
KlausV587 2014-09-24
  • 打赏
  • 举报
回复
好速度啊!!我先看看理解下!非常感谢!!
引用 1 楼 ghx287524027 的回复:
这个问题应该是存在的,你可以实际测试一下。另外,下面是一个reload出现重复进程的的解决机制: 我觉得任何线程都应该有一个退出机制,例如: public void run() { while(flag) { try { work(); Thread.sleep(6000); }catch(Exception e){} } } 在servlet的destroy方法里 设置flag=false就可以让线程退出。 在tomcat中可以注册ServletContextListener,这是一个标准的机制。 public void contextInitialized(ServletContextEvent sce); public void contextDestroyed(ServletContextEvent sce); 允许程序在系统启动和关闭的时候作一些工作。我把线程的启动和关闭都放在这里了,这样系统在reload的时候,也会调用ServletContextListener的方法。
ghx287524027 2014-09-24
  • 打赏
  • 举报
回复
这个问题应该是存在的,你可以实际测试一下。另外,下面是一个reload出现重复进程的的解决机制: 我觉得任何线程都应该有一个退出机制,例如: public void run() { while(flag) { try { work(); Thread.sleep(6000); }catch(Exception e){} } } 在servlet的destroy方法里 设置flag=false就可以让线程退出。 在tomcat中可以注册ServletContextListener,这是一个标准的机制。 public void contextInitialized(ServletContextEvent sce); public void contextDestroyed(ServletContextEvent sce); 允许程序在系统启动和关闭的时候作一些工作。我把线程的启动和关闭都放在这里了,这样系统在reload的时候,也会调用ServletContextListener的方法。
humanity 2014-09-24
  • 打赏
  • 举报
回复
这个方法不错,要主动停止服务器时把当前内存的状态记录下来,比如把定时器的值写入到一个临时文件中保存,每次服务器重启之后检查这个文件是否存在,有的话就恢复出来并删除临时文件,如果没有的话重新开始计数。如果像是停电这种意外关机一般也不考虑吧(当然也可以每次更新计数器的值时都同步到这个临时文件中备份一下)。
引用 2 楼 taosheng2012 的回复:
好速度啊!!我先看看理解下!非常感谢!! [quote=引用 1 楼 ghx287524027 的回复:] 这个问题应该是存在的,你可以实际测试一下。另外,下面是一个reload出现重复进程的的解决机制: 我觉得任何线程都应该有一个退出机制,例如: public void run() { while(flag) { try { work(); Thread.sleep(6000); }catch(Exception e){} } } 在servlet的destroy方法里 设置flag=false就可以让线程退出。 在tomcat中可以注册ServletContextListener,这是一个标准的机制。 public void contextInitialized(ServletContextEvent sce); public void contextDestroyed(ServletContextEvent sce); 允许程序在系统启动和关闭的时候作一些工作。我把线程的启动和关闭都放在这里了,这样系统在reload的时候,也会调用ServletContextListener的方法。
[/quote]

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧