日期:2014-05-20  浏览次数:20753 次

关于结束 另外一个线程的问题,求助
遇到一个奇怪的现象,线程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