RT在项目中使用了很多的自定义的线程,但是通过shutdown.sh关闭tomcat时,却出现线程没有关闭的错误。有人说在创建这些线程的时候需要将该线程设置为守护线程,关闭tomcat的时候就可以一起关闭。但是实验效果不是很好。有没有什么好的办法呢?又假如我写了个listener来监听tomcat的启动和关闭,在销毁的方法中,我写如下代码: System.exit(0);直接退出JVM,不去管那些线程。不知道这样可不可以,是否会造成负面影响呢?
这个问题很是纠结啊。大家帮帮忙

解决方案 »

  1.   

    线程可以分为两种,一种是守护线程,一种是非守护线程。守护线程是为非守护线程服务的,当系统中不存在非守护线程时,守护线程自动关闭。由于你关闭的时候,是非守护线程没有关闭,所以你用守护线程来做这个事情不太好解决。楼主可以这么做:
     1.在Tomcat启动的时候启动一个servlet,这个servlet启动的时候启动项目中开发的线程,在servelt关闭的时候关闭开发的线程
    2.利用运行时的钩子来解决,RunTime.getRunTime().addShutdownHook()来解决,这部分代码可以参考我的博客,地址:
       http://blog.csdn.net/wgw335363240/archive/2010/08/31/5854402.aspx