导航:首页 > 编程语言 > 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停止运行线程相关的资料

热点内容
一元线性回归计算法 浏览:945
刷宝app是什么鬼 浏览:739
linux动态加载模块 浏览:20
javamd5工具类 浏览:71
安保嘉奖命令 浏览:645
bt种子能压缩吗 浏览:671
JAVA特点是什么 浏览:881
字幕网app怎么找 浏览:528
奥迪a4l压缩比 浏览:693
iis7服务器怎么安装 浏览:977
孩子上学压力太大怎么解压 浏览:238
javaurl格式 浏览:344
匀称app怎么用 浏览:63
pythonemail中文乱码 浏览:444
android访问html 浏览:90
做一个app或者网页用什么编程 浏览:778
一体机服务器运行失败怎么办 浏览:938
longjava比较大小 浏览:532
clojure编程pdf 浏览:22
一年级数学圈一圈的算法 浏览:111