我的tomcat用来跑一个webservice的应用,但在这个应用初始化的程序里我开了一个线程用来执行其它的一些事情,而且这个线程是用
while(true)
 {
    try {
     } catch (Exception ) {
     }
}的方式运行的,所以我启动后就没法停止这个线程了,我执行tomcat/bin/shutdown.sh都不管用,一直出现空指针异常,我也不知道为什么。
然后我只有kill掉这个进程,有没有办法用来停这种情况的服务器?
在web应用中自己开线程做别的服务好吗?因为要线程之间通讯,本来是做成两个进程的,一个是web中跑的,一个是java脚本执行的。但进程间不太方便通讯,所以放在一起了,直接挂在web服务器的一个线程下面,这样合理吗?会不会有什么隐患?而且我这个线程里创建了一个线程池。

解决方案 »

  1.   

    我做过跟你类似的东西,好像是有这个问题,当时也没做特别处理,是停tomcat之后,手动kill掉那个java进程的
    当时觉得不重要,急忙就上线了,没仔细想过怎么处理
      

  2.   

    现在想来,那是linux下出的问题,window下好像没事儿!涉及到父子线程的问题吧?
    具体还请高人来指点,我这里仅供参考
      

  3.   

    这样就上线?直接kill太霸道了吧?按道理父进程都停了线程应该也跟着断了,所以我想如何知道tomcat或别的应用服务器执行了stop之类的命令,这样我就可以在我的那个线程里执行shutdown了,但不知道如何捕捉停止命令。所以请教高人啊。。
      

  4.   

    可以把true改为boolean型变量(如start),设为true,当要关闭时,把他再设为false。
      

  5.   

    在try里面加上判断语句,让它在执行之前都判断一下~如果条件不符合那就把(start)的值改成false~否则就不改变~
      

  6.   

    线程起动之前将该线程标记为守护线程,这样tomcat就能正常结束了.
         thread.setDaemon(true)
        thread.start();tomcat重新装载一个应用的时候会把类的静态变量全部置为空,这个可以作为线程结束的标志