tomcat 中关于自定义线程的关闭

开发环境:
Tomcat7 + Spring3 + Hibernate3

现象:
在tomcat中自定义的线程不能随着应用的停止而关闭(可以随着tomcat的停止而关闭)。

伴随异常:
-----------
...
严重:The web application ... appears to have started a thread named[NioSocketAcceptor-1] but has failed to stop it. This is very likely to create a memory leak.
...

解决方法:
在停止应用的时候应该加入关闭自定义线程的处理。

以下是使用mina的例子:
1.应用开始的时候通过xml中的Listener初始化一个acceptor(acceptor的具体设定不在列出)
2.应用停止的时候在contextDestroyed中对acceptor其进行关闭。

web.xml

...
<listener>
<listener-class>com.mina.test.InitListener</listener-class>
</listener>
...


InitListener.java


public class InitListener implements ServletContextListener
...
private ApplicationContext context;
public void contextDestroyed(ServletContextEvent arg0) {
// 应用关闭的时候调用NioSocketAcceptor的dispose()方法
// ioAcceptor就是定义在applicationContext-minaServer.xml中的bean名字
NioSocketAcceptor nioacceptor = (NioSocketAcceptor)context.getBean("ioAcceptor");
nioacceptor.dispose();
}

public contextInitiialized(ServletContextEvent arg0) {
// 应用开始的时候初始化mina,会创建一个NioSocketAcceptor进程
context = new ClassPathXmlApplicationContext("applicationContext-minaServer.xml");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值