关于Java线程超时退出的问题.

小弟近来有个任务是这样的,JAVA主程序中开启一个线程,我希望在一定的时间范围内 如果这个线程还没有运行完,就采取一些方法主动将他干掉,试了网上很多的方法都没有用,顶多是能抛出个异常,通知一下超时,但是线程还是在继续运行。
请教各位大虾们该怎么解决啊!!!
就没有哪个神人,能解决这个问题么. 我开的这个线程可能是要和别的程序进行交互,交互过程中可能会卡死,所以我才想能不能采取一些方法将他主动停掉,你们介绍的方法都不行...

结贴了吧.

第1个回答  推荐于2016-10-22
你在捕捉到的异常中,调用一下线程的interrupt()方法就可以对线程进行中断,当然,你的线程中的run方法中不能catch了interrupt()异常并且忽视这个异常。

比如在出现异常的地方:
threadA.interrupt();

而threadA的run方法中:
public void run() {
while(true) {
try {
....
} catch (InterruptedException) {
break; //这样是可以的,如果没有break或者修改为continue则不行
}
}
}

也可以将这个放在while循环之外。
public void run() {
try {
while(true) {

....
}
} catch (InterruptedException) {
....
}
}本回答被提问者采纳
第2个回答  2010-07-13
class AutoCloseThread implements Runnable{
private int limit;//限制
private Timer timer=new Timer();

@Override
public void run() {
TimerTask task=new TimerTask() {
@Override
public void run() {
limit++;
if(limit>50) timer.cancel();
}
};
timer.schedule(task, 0, 1000);
timer.schedule(task, 0);
}

}
shaoyunlu 2010-7-13 17:31:19
timer.schedule(task, 0, 1000);
timer.schedule(task, 0);
这两个 要一起写?
军 2010-7-13 17:44:31
不是
军 2010-7-13 17:44:43
timer.schedule(task, 0, 1000);
timer.schedule(“webservice”, 0);

参考资料:还有其他问题的话,给我发百度消息

第3个回答  2010-07-13
java.util.concurrent.Future
默认实现java.util.concurrent.FutureTask
你去查一下有关这个类的用法吧,他能满足你的要求。
或者java.util.concurrent.ExecutorService这个线程池也行。
第4个回答  2010-07-19
线程中run()写法类似下面
public void run()
{
....
while(t<毫秒)

。。。。。
}//程序结束


在while里设置线程停止条件,我这个是判断时间。也可以设置一个标识,例如:
public void run()
{
boolean isEnd = false;
.....
while(isEnd == false)
{
if(....)
{
isEnd = true;
break;
}
......
}
}

有空看看《JAVA多线程设计》,好书,结合设计模式讲的JAVA多线程。浅显易懂

===============补充你的补充问题==============

你既然说是想主动停掉。这个意思已经很明显了,你现在的问题只是,你在代码设计思路上陷入死循环了。
所谓主动停掉就是到了指定的条件,程序自然死亡结束。你要做的就是写一个销毁方法,将线程结束的所有操作都写在里面,包括你调用或交互的其它程序结束方法。然后在指定条件下调用这个销毁操作。我不知道我说的明白不?
相似回答