java 多线程如何让程序运行一定时间后停止

如题所述

你说的应该不是sleep吧。呵呵,
这么简单的话,就没必要在这里问了。
我猜测呢,你是要在多线程计时任务
Task线程里面有个while循环?
那么你需要一个TimerTask 来控制这个线程,也就是计时线程。
那么这个计时线程,有两种方法~
第一种,比较不讲究的方法,也就是,对结果处理不好的方式,类似于过时方法的stop,就是把你的Task线程在TimerTask里面启动。
TimerTask里面类似于
while(true){
Task.start();
Date date = new Date();
while(true){
计算时间差,如果时间差大于超时时间,则break


而在Task线程中,需要加上一行代码
this.setDeamon(true);
将这个task任务设置成后台线程。
因为是TimerTask启动的这个后台任务线程, 一旦超时,那么,这个后台线程Task将会被强制shutdown 。
这种方式适用于不怎么严格的线程要求。

还有一种呢,就是比较严格,对后台处理要求很高的那种。
就是两个线程中需要有共享的变量,将结果,运行状态,都要共享,当TimerTask发现超时的时候,会判断Task线程的处理结果。以及运行状态,而做出相应的处理。

你问的问题比较宽泛。所以,我只能大致的把思路给介绍一下。
如果,能牵扯到实际的问题,那样就容易判断用那种方式的线程超时机制比较好了。呵呵
最后,节日愉快~~

参考资料:手打

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-25


import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
   private final ScheduledExecutorService scheduler =
     Executors.newScheduledThreadPool(1);

   public void beepForAnHour() {
     final Runnable beeper = new Runnable() {
       public void run() { System.out.println("beep"); }
     };
     final ScheduledFuture<?> beeperHandle =
       scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
     scheduler.schedule(new Runnable() {
       public void run() { beeperHandle.cancel(true); }
     }, 60 * 60, SECONDS);
   }
 }

一个使用ScheduledExecutorService的例子。每十秒输出一次beep,一小时后停止。

第2个回答  2010-10-06
给你一个完整的吧。
public class sleepAndStart implements Runnable{
boolean run=true;
int i=0;
sleepAndStart(){}
public void run() {
while(run){
if(i<20){
i++;
System.out.println("hello."+i);
try {
Thread.sleep(200);//执行上面两段语句后睡200毫秒
} catch (InterruptedException e) {}
}else{
run=false;
}
}
}
public static void main(String[] args){
sleepAndStart sas=new sleepAndStart();
Thread thread=new Thread(sas);
thread.start();
}
}
第3个回答  2010-09-24
Thread.sleep(时间 毫秒单位);
注意运行他是会抛错!InterrputedException本回答被网友采纳
第4个回答  2010-09-24
try{
Thread.sleep(2000);
}catch(InterruptedException e){
e.printStackTrace()
}
相似回答