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

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

推荐于2017-09-23 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

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

pawpaw100
推荐于2016-02-13 · 超过16用户采纳过TA的回答
知道小有建树答主
回答量:43
采纳率:0%
帮助的人:40万
展开全部
使用计时器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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
奚霞钭凰
2020-02-17 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:31%
帮助的人:2075万
展开全部
使用计时器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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
改淑珍尚娴
2019-03-31 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:26%
帮助的人:1088万
展开全部
使用计时器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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
七小朵7Z
2008-07-29 · 超过13用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:0
展开全部
我是初学者,好像有个Thread.sleep();的方法,休眠多长时间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式