博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat中多线程web服务的关闭
阅读量:6532 次
发布时间:2019-06-24

本文共 1357 字,大约阅读时间需要 4 分钟。

问题:

将多线程web服务部署于tomcat中,该web服务中的子线程一直在运行(或时不时被触发运行),关闭tomcat后,该web服务没有被同时关掉(windows系统中表现为tomcat.exe进程已经关闭,java.exe进程依旧存在,并且在继续执行)

解决方法:

新建一个监听类,该类实现ServletContextListener接口中的contextInitiialized()方法和contextDestroyed()方法。然后在tomcat中注册该监听类,开启或关闭tomcat时,都将先执行该监听类

1、举例:新建监听类CgmIndexListener

package com.saas.cgm; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; //若使用ServletContextListener接口,可能需添加javax.servlet-5.1.12.jar或其它库 public class CgmIndexListener implements ServletContextListener{   private static ExecutorService exec = Executors.newCachedThreadPool();//线程池 //关闭tomcat前关闭线程 public void contextDestroyed(ServletContextEvent arg0) {      exec.shutdownNow();;   }   //开启tomcat前执行线程 public contextInitiialized(ServletContextEvent arg0) {     RamIndexWriter ramIndexWriter = new RamIndexWriter();//新建一个线程   exec.execute(ramIndexWriter); }

2、注册该监听类:在tomcat安装目录下的conf文件夹内的web.xml文件中添加:

com.saas.cgm.CgmIndexListener

添加完如下所示:

default
/
jsp
*.jsp
jsp
*.jspx
  
com.saas.cgm.CgmIndexListener

3、此时,关闭tomcat时,tomcat首先关闭线程池exec中的ramIndexWriter 线程,当没有子线程在运行时,java.exe进程也就能被顺利关闭了

推荐一个自己业余时间开发的引擎,()

转载地址:http://moqbo.baihongyu.com/

你可能感兴趣的文章
创建Visual Studio项目模版向导的几篇参考文章
查看>>
深入浅出SQL Server Replication第一篇:走近Replication(上)
查看>>
[TopCoder][SRM] SRM 562 DIV 2
查看>>
SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第一篇)
查看>>
LocalAlloc,VirtualAlloc,malloc,new的异同
查看>>
回调函数
查看>>
win7 x64 jdk1.7.0_51
查看>>
这些开源项目,你都知道吗?(持续更新中...)[原创]
查看>>
linux中利用iptables+geoip过滤指定IP
查看>>
在myeclipse中写sql语句的细节问题
查看>>
使用ShellExecute打开目标文件所在文件夹并选中目标文件
查看>>
HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
查看>>
Minix中的字符判定ctype.c
查看>>
91平台iOS接入demo
查看>>
五个优秀的硬盘检测工具
查看>>
用js实现table内容从下到上连续滚动
查看>>
基于ffmpeg的流媒体服务器
查看>>
项目积累——Blockingqueue,ConcurrentLinkedQueue,Executors
查看>>
JVM学习笔记(一)------基本结构
查看>>
活动目录之备份与恢复
查看>>