java 中如何使线程运行一定时间后停止?
主要此线程运行后可能1-2分钟无返回值,运行如果超过1分钟的,就要终止掉,线程只有自己关闭自己,而自己在运行,无法进行下一步代码的执行,那怎么终止呢?最好给出代码。...
主要此线程运行后可能1-2分钟无返回值,运行如果超过1分钟的,就要终止掉,线程只有自己关闭自己,而自己在运行,无法进行下一步代码的执行,那怎么终止呢?最好给出代码。
展开
5个回答
展开全部
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
展开全部
使用计时器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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用计时器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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用计时器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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
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秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我是初学者,好像有个Thread.sleep();的方法,休眠多长时间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询