关于结束 另外一个线程的问题,求助
遇到一个奇怪的现象,线程A 在对oracle远程库访问的时候select count(*) from table@dblink 这条语句执行会出现卡死情况,无异常,如果拔网线则出
连接失败异常,该现象偶然出现.怀疑是网络不稳定造成.
现在想得一个解决办法:启动一个监控线程B(因为A已经无法往下运行,所以不能用设定全局变量的办法在while中自动结束自己).B在发现A卡在那条语句的时候,该如何把A线程杀掉再重起?
几个办法:
1. Stop()方法,但是在新的JDK版本中已经带上删除线了,不推荐使用,说不安全,写过测试例子,确实可以停止,然后再start起来.
2.所谓的interrupt()方法,经测试,发现B单纯的使用A.interrupt()是没用的,除非A程序中有
try{
sleep(5000)
}
catch(interruptexception e){
this.interrupt();
}
然后还要求A的while 循环中有while(!this.isInterrupted()),才可以杀掉A线程.
请问在JAVA中用什么办法能够达到kill -9这样的效果呢?stop不能用,那么interrupt应该怎么用?是不是我用的方法不对?
------解决方案--------------------如果你用的是jdk1.5,可以试试java.nio包下的几个类,有可以cancel一个线程的,不过它的原理也是interruptexception
要不你就直接使用stop方法,因为它不推荐的原因是因为被强行中止而引起死锁,而你的需求就是要强行中止,所以应该用它。
------解决方案--------------------mark