你在捕捉到的异常中,调用一下线程的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) {
....
}
}
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);
java.util.concurrent.Future
默认实现java.util.concurrent.FutureTask
你去查一下有关这个类的用法吧,他能满足你的要求。
或者java.util.concurrent.ExecutorService这个线程池也行。
线程中run()写法类似下面
public void run()
{
....
while(t<毫秒)
{
。。。。。
}//程序结束
}
在while里设置线程停止条件,我这个是判断时间。也可以设置一个标识,例如:
public void run()
{
boolean isEnd = false;
.....
while(isEnd == false)
{
if(....)
{
isEnd = true;
break;
}
......
}
}
有空看看《JAVA多线程设计》,好书,结合设计模式讲的JAVA多线程。浅显易懂
===============补充你的补充问题==============
你既然说是想主动停掉。这个意思已经很明显了,你现在的问题只是,你在代码设计思路上陷入死循环了。
所谓主动停掉就是到了指定的条件,程序自然死亡结束。你要做的就是写一个销毁方法,将线程结束的所有操作都写在里面,包括你调用或交互的其它程序结束方法。然后在指定条件下调用这个销毁操作。我不知道我说的明白不?