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

发布网友

我来回答

5个回答

热心网友

你说的应该不是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线程的处理结果。以及运行状态,而做出相应的处理。

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

参考资料:手打

热心网友



import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
   private final ScheledExecutorService scheler =
     Executors.newScheledThreadPool(1);

   public void beepForAnHour() {
     final Runnable beeper = new Runnable() {
       public void run() { System.out.println("beep"); }
     };
     final ScheledFuture<?> beeperHandle =
       scheler.scheleAtFixedRate(beeper, 10, 10, SECONDS);
     scheler.schele(new Runnable() {
       public void run() { beeperHandle.cancel(true); }
     }, 60 * 60, SECONDS);
   }
 }

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

热心网友

给你一个完整的吧。
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();
}
}

热心网友

Thread.sleep(时间 毫秒单位);
注意运行他是会抛错!InterrputedException

热心网友

try{
Thread.sleep(2000);
}catch(InterruptedException e){
e.printStackTrace()
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com