java 中如何使线程运行一定时间后停止?

主要此线程运行后可能1-2分钟无返回值,运行如果超过1分钟的,就要终止掉,线程只有自己关闭自己,而自己在运行,无法进行下一步代码的执行,那怎么终止呢?最好给出代码。

java中使线程运行一定时间后停止,可以设置一个变量,当满足条件则退出线程:

import static java.lang.Thread.currentThread;
import java.util.concurrent.TimeUnit;
public class ThreadPauseDemo{
   public static void main(String args[]) throws InterruptedException {
       Game game = new Game();
       Thread t1 = new Thread(game, "T1");
       t1.start();
       // çŽ°åœ¨åœæ­¢Game线程
       System.out.println(currentThread().getName() + " is stopping game thread");
       game.stop();
       // æŸ¥çœ‹Game线程停止的状态
       TimeUnit.MILLISECONDS.sleep(200);
       System.out.println(currentThread().getName() + " is finished now");
   }
}

class Game implements Runnable{
   private volatile boolean isStopped = false;
   public void run(){
       while(!isStopped){
           System.out.println("Game thread is running......");
           System.out.println("Game thread is now going to pause");
           try{
               Thread.sleep(200);
           } catch(InterruptedException e){
               e.printStackTrace();
           }
           System.out.println("Game thread is now resumed......");
       }
       System.out.println("Game thread is stopped......");
   }
   public void stop(){
       isStopped = true;
   }
}

程序输出如下:

Game thread is running......
main is stopping game thread
Game thread is now going to pause
Game thread is now resumed......
Game thread is stopped......
main is finished now

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-02-13
使用计时器Timer,可以实现,在计时器中设定时间,到达后关闭计时器,退出线程就行了。

import java.awt.*;
import java.awt.event.*;
import javax.swing.Timer;

class tt implements ActionListener{
ttt t;
Timer time;
public tt(ttt t){
this.t=t;
time=new Timer(1000,this);
time.setRepeats(false);
}

public void actionPerformed(ActionEvent e){
time.stop();
}
}
class ttt extends Thread{
tt temp;
int i=0;
public ttt(){
temp=new tt(this);
}
public void run(){
temp.time.start();
while(i<10000){
System.out.print(i+" ");
i++;
if(!temp.time.isRunning()){
System.out.println("End");
return;
}
}
}
}
public class time {
public static void main(String args[]){
ttt tttt=new ttt();
tttt.start();
}
}
这个是我做的,打印1-10000,如果时间超过1秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。本回答被提问者和网友采纳
第2个回答  2020-02-17
使用计时器Timer,可以实现,在计时器中设定时间,到达后关闭计时器,退出线程就行了。
import
java.awt.*;
import
java.awt.event.*;
import
javax.swing.Timer;
class
tt
implements
ActionListener{
ttt
t;
Timer
time;
public
tt(ttt
t){
this.t=t;
time=new
Timer(1000,this);
time.setRepeats(false);
}
public
void
actionPerformed(ActionEvent
e){
time.stop();
}
}
class
ttt
extends
Thread{
tt
temp;
int
i=0;
public
ttt(){
temp=new
tt(this);
}
public
void
run(){
temp.time.start();
while(i<10000){
System.out.print(i+"
");
i++;
if(!temp.time.isRunning()){
System.out.println("End");
return;
}
}
}
}
public
class
time
{
public
static
void
main(String
args[]){
ttt
tttt=new
ttt();
tttt.start();
}
}
这个是我做的,打印1-10000,如果时间超过1秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
第3个回答  2019-03-31
使用计时器Timer,可以实现,在计时器中设定时间,到达后关闭计时器,退出线程就行了。
import
java.awt.*;
import
java.awt.event.*;
import
javax.swing.Timer;
class
tt
implements
ActionListener{
ttt
t;
Timer
time;
public
tt(ttt
t){
this.t=t;
time=new
Timer(1000,this);
time.setRepeats(false);
}
public
void
actionPerformed(ActionEvent
e){
time.stop();
}
}
class
ttt
extends
Thread{
tt
temp;
int
i=0;
public
ttt(){
temp=new
tt(this);
}
public
void
run(){
temp.time.start();
while(i<10000){
System.out.print(i+"
");
i++;
if(!temp.time.isRunning()){
System.out.println("End");
return;
}
}
}
}
public
class
time
{
public
static
void
main(String
args[]){
ttt
tttt=new
ttt();
tttt.start();
}
}
这个是我做的,打印1-10000,如果时间超过1秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
第4个回答  2008-07-29
我是初学者,好像有个Thread.sleep();的方法,休眠多长时间

Java如何停止线程
1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。3. 使用interrupt方法中断线程。1. 使用退出标志终止线程 当run方法执行完后,线程就会退出。但有时run方法是永远不...

java 多线程如何让程序运行一定时间后停止
第一种,比较不讲究的方法,也就是,对结果处理不好的方式,类似于过时方法的stop,就是把你的Task线程在TimerTask里面启动。TimerTask里面类似于 while(true){ Task.start();Date date = new Date();while(true){ 计算时间差,如果时间差大于超时时间,则break } } 而在Task线程中,...

Java线程停止的方法,及stop等方法为什么被废弃
在 Java 中有以下 3 种方法可以终止正在运行的线程:停止一个线程的推荐做法是修改某些变量以指示目标线程应停止运行。 目标线程应定期检查此变量,如果该变量指示要停止运行,则应有序地从其运行方法返回。 这是为了确保对 stop-request 进行及时的通信,变量必须是 volatile 或者必须同步访问变量。使用 ...

java 如何让一个程序运行一段时间后就停止运行
public static void main(String[] args) { long begain = System.currentTimeMillis();\/\/开始系统时间 try { Thread.sleep(100);} catch (Exception e) { e.printStackTrace();} long CheckTime = System.currentTimeMillis(); \/\/判断时间 while(true){ System.out.println(CheckTime-begain);...

java 线程池中正在运行的线程 如何设置超时时间 ps:如何设置一个线程最...
你可以设置一个计时器,然后把线程对象给它,让计时器在恰当时候把线程对象终止

java使用线程操作,等待线程后续时间过长报超时异常,如何操作使线程推出...
java中使用用线程控制Task任务,启动下面的线程就可以了,new Thread(new Task()).start() ;public class Task implements Runnable {\/\/新建一个任务 private TextArea textArea;public Task(TextArea textArea){ this.textArea = textArea;} public void run() { while (true) { this.textArea....

如何实现Java线程的暂停和重新启用?
JAVA中线程开始有start方法,暂停用sleep(time)方法,线程停止用stop方法,线程等待wait方法,java 中没有线程重启一说,只能说线程唤醒notifyAll()或是notify方法,前一个notifyAll()方法是唤醒所有的已休眠或是等待状态下的线程。具体的一种参数请参照JDK文档。Java中的线程的生命周期大体可分为5种状态...

哪些情况可以终止当前线程的运行
线程可以通过多种方式终止其运行,包括正常结束、异常抛出、使用线程中断以及任务超时等。1. 正常结束:线程运行完其对应的任务后,会自然结束。在Java、Python等编程语言中,当线程的run方法执行完毕,线程就会正常结束。例如,在Java中,我们可以创建一个Thread实例,并覆写其run方法,当run方法执行完毕,...

JAVA中如何让程序暂停?
看到的回答确实有点不明不白的。楼主估计已经搞定了吧,应该是这么做的 在你想要暂停的地方加上下面这段程序 try{ Thread.sleep(10000);}catch(Exception e){ } 不需要添加什么包哦,sleep里面的参数就是你要停止的时间,单位是毫秒。

java线程关闭时会执行结束线程的方法吗
在Java服务正常关闭或重启时,未执行完的线程会被中止。但是,这并不意味着线程会立即终止或丢失。在一个正常关闭或重启的过程中,Java虚拟机会尝试以一种安全的方式停止所有的线程。正常关闭:当你调用System.exit()或者通过其他方式(例如:在Spring Boot应用中使用\/shutdown端点)正常关闭应用时,Java...

相似回答