导航:首页 > 编程语言 > java停止运行线程

java停止运行线程

发布时间:2023-08-16 06:33:06

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

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

importstaticjava.lang.Thread.currentThread;
importjava.util.concurrent.TimeUnit;
publicclassThreadPauseDemo{
publicstaticvoidmain(Stringargs[])throwsInterruptedException{
Gamegame=newGame();
Threadt1=newThread(game,"T1");
t1.start();
//现在停止Game线程
System.out.println(currentThread().getName()+"isstoppinggamethread");
game.stop();
//查看Game线程停止的状态
TimeUnit.MILLISECONDS.sleep(200);
System.out.println(currentThread().getName()+"isfinishednow");
}
}

classGameimplementsRunnable{
=false;
publicvoidrun(){
while(!isStopped){
System.out.println("Gamethreadisrunning......");
System.out.println("Gamethreadisnowgoingtopause");
try{
Thread.sleep(200);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("Gamethreadisnowresumed......");
}
System.out.println("Gamethreadisstopped......");
}
publicvoidstop(){
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

‘贰’ Java中如何正确而优雅的终止运行中的线程

Java中终止线程的方式主要有三种:

1、使用stop()方法,已被弃用。原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的“残疾”数据,不符合完整性,所以被废弃。So, forget it!

2、使用volatile标志位

看一个简单的例子:

首先,实现一个Runnable接口,在其中定义volatile标志位,在run()方法中使用标志位控制程序运行

{

//定义退出标志,true会一直执行,false会退出循环
//使用volatile目的是保证可见性,一处修改了标志,处处都要去主存读取新的值,而不是使用缓存
publicvolatilebooleanflag=true;

publicvoidrun(){
System.out.println("第"+Thread.currentThread().getName()+"个线程创建");

try{
Thread.sleep(1000L);
}catch(InterruptedExceptione){
e.printStackTrace();
}

//退出标志生效位置
while(flag){
}
System.out.println("第"+Thread.currentThread().getName()+"个线程终止");
}
}

然后,在main()方法中创建线程,在合适的时候,修改标志位,终止运行中的线程。

publicclassTreadTest{
publicstaticvoidmain(String[]arg)throwsInterruptedException{
MyRunnablerunnable=newMyRunnable();

//创建3个线程
for(inti=1;i<=3;i++){
Threadthread=newThread(runnable,i+"");
thread.start();
}
//线程休眠
Thread.sleep(2000L);
System.out.println("——————————————————————————");
//修改退出标志,使线程终止
runnable.flag=false;
}
}

最后,运行结果,如下:

第1个线程创建
第2个线程创建
第3个线程创建
--------------------------
第2个线程终止
第1个线程终止
第3个线程终止

3、使用interrupt()中断的方式,注意使用interrupt()方法中断正在运行中的线程只会修改中断状态位,可以通过isInterrupted()判断。如果使用interrupt()方法中断阻塞中的线程,那么就会抛出InterruptedException异常,可以通过catch捕获异常,然后进行处理后终止线程。有些情况,我们不能判断线程的状态,所以使用interrupt()方法时一定要慎重考虑。

‘叁’ java线程如何停止

通过调用interrupt方法可以使得处于阻塞状态的线程抛出一个异常,即interrupt方法可以用来中断一个正处于阻塞状态的线程;另外,改方法还会设置线程的中断状态(注:isInterrupted()可以用来查询中断状态)。

阅读全文

与java停止运行线程相关的资料

热点内容
广东分布式服务器云主机 浏览:578
服务器忙打不开怎么办 浏览:10
tif压缩软件 浏览:408
程序员那么可爱陆漓上班第1天 浏览:950
macbookair自带什么app 浏览:696
如何关了加密的软件 浏览:577
程序员p2p待遇 浏览:920
ipd编译要求 浏览:931
压缩解压王怎么用 浏览:29
服务器共享文件如何备份 浏览:752
买安卓手机怎么在官网买 浏览:122
诗词入门PDF 浏览:361
毒app是什么单位 浏览:64
如何自己编译android系统 浏览:792
phpmysqlpdomysqli 浏览:808
php修改sql语句 浏览:720
android有道api 浏览:387
挠耳营水表用的什么app 浏览:54
战锤40kpdf 浏览:381
java判断字符串是汉字 浏览:468