如何停止web服务器中一直在运行的一个线程?

THEBEST 2009-03-23 09:23:35
我的tomcat用来跑一个webservice的应用,但在这个应用初始化的程序里我开了一个线程用来执行其它的一些事情,而且这个线程是用
while(true)
{
try {
} catch (Exception ) {
}
}

的方式运行的,所以我启动后就没法停止这个线程了,我执行tomcat/bin/shutdown.sh都不管用,一直出现空指针异常,我也不知道为什么。
然后我只有kill掉这个进程,有没有办法用来停这种情况的服务器?


在web应用中自己开线程做别的服务好吗?因为要线程之间通讯,本来是做成两个进程的,一个是web中跑的,一个是java脚本执行的。但进程间不太方便通讯,所以放在一起了,直接挂在web服务器的一个线程下面,这样合理吗?会不会有什么隐患?而且我这个线程里创建了一个线程池。
...全文
471 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
freelove1 2011-01-24
  • 打赏
  • 举报
回复
在 contextInitialized中处理
skycc999 2009-03-24
  • 打赏
  • 举报
回复
还是kill直接啊
david2083 2009-03-24
  • 打赏
  • 举报
回复
线程起动之前将该线程标记为守护线程,这样tomcat就能正常结束了.
thread.setDaemon(true)
thread.start();

tomcat重新装载一个应用的时候会把类的静态变量全部置为空,这个可以作为线程结束的标志
wclszh 2009-03-24
  • 打赏
  • 举报
回复
顶学习了。
jourqel 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 THEBEST 的回复:]
如何知道什么时候关闭呢?
[/Quote]
在try里面加上判断语句,让它在执行之前都判断一下~如果条件不符合那就把(start)的值改成false~否则就不改变~
THEBEST 2009-03-24
  • 打赏
  • 举报
回复
如何知道什么时候关闭呢?
lvzhu18 2009-03-23
  • 打赏
  • 举报
回复
可以把true改为boolean型变量(如start),设为true,当要关闭时,把他再设为false。
THEBEST 2009-03-23
  • 打赏
  • 举报
回复
这样就上线?直接kill太霸道了吧?按道理父进程都停了线程应该也跟着断了,所以我想如何知道tomcat或别的应用服务器执行了stop之类的命令,这样我就可以在我的那个线程里执行shutdown了,但不知道如何捕捉停止命令。所以请教高人啊。。
huguang 2009-03-23
  • 打赏
  • 举报
回复
现在想来,那是linux下出的问题,window下好像没事儿!涉及到父子线程的问题吧?
具体还请高人来指点,我这里仅供参考
huguang 2009-03-23
  • 打赏
  • 举报
回复
我做过跟你类似的东西,好像是有这个问题,当时也没做特别处理,是停tomcat之后,手动kill掉那个java进程的
当时觉得不重要,急忙就上线了,没仔细想过怎么处理

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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