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

热点内容
高尔夫电台怎么添加到文件夹 浏览:237
四川麻将一般下哪个app 浏览:862
反编译exe脚本 浏览:460
源码文件夹怎么编译到固件中 浏览:910
ERp打印服务器错误怎么弄 浏览:111
蚌端口u盘加密软件有哪些 浏览:178
前端如何认证服务器 浏览:554
linux切换db2用户命令 浏览:308
相片如何用电解压 浏览:906
硕士程序员去学校当老师 浏览:120
pythonstr提取到字典 浏览:818
程序员那么可爱有人看上陆漓了 浏览:878
php正则提取图片 浏览:105
pythonlinuxdjango 浏览:562
php中文返回乱码 浏览:89
宿舍装的电信怎么加密 浏览:745
为什么压缩文件解压后变少了 浏览:426
现在安卓充电器普遍是什么型号 浏览:714
9日均线36均线主图指标源码 浏览:351
程序员阿里文化完整版 浏览:98