关于JAVA语言终止线程的三种方法介绍
小标 2018-09-11 来源 : 阅读 921 评论 0

摘要:本文主要向大家介绍了关于JAVA语言终止线程的三种方法介绍,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了关于JAVA语言终止线程的三种方法介绍,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

使用标志位退出线程 使用stop方法强制终止线程 使用interrupt终止线程
1. 使用标志位退出线程
这种也是最常用的方法,就是定义一个boolean型的标志位,在线程的run方法中根据这个标志位是true还是false来判断是否退出,这种情况一般是将任务放在run方法中的一个while循环中执行的。
public class ThreadFlag extends Thread {  public volatile boolean exit = false;   public void run() {   while (!exit) {  //do something }}   public static void main(String[] args) throws Exception  {   ThreadFlag thread = new ThreadFlag();   thread.start();   sleep(5000); // 主线程延迟5秒   thread.exit = true;  // 终止线程thread  thread.join();   System.out.println("线程退出!");  }    }
或者,run方法中如果你不是使用while循环处理,则可以隔一段代码调用一次标志位判断:
public class ThreadFlag extends Thread {  public volatile boolean exit = false;   public void run() {   //do something if (!exit)return; //do something if (!exit)return; //do something if (!exit)return; //do something if (!exit)return;}  }
2. 使用stop方法强制终止线程
使用stop方法可以强行终止正在运行或挂起的线程。我们可以使用如下的代码来终止线程:
thread.stop();
虽然这样可以终止线程,但使用stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,因此,并不推荐使用stop方法来终止线程。
3. 使用interrupt终止线程
使用interrupt方法来终端线程可分为两种情况:
(1)线程处于阻塞状态,如使用了sleep方法。
(2)使用while(!isInterrupted()){……}来判断线程是否被中断。
在第一种情况下使用interrupt方法,sleep方法将抛出一个InterruptedException例外,而在第二种情况下线程将直接退出。
第一种情况示例代码:
public class ThreadInterrupt extends Thread {   public void run()  {    try {  sleep(50000);  // 延迟50秒    }    catch (InterruptedException e) {  System.out.println(e.getMessage());    }   }   public static void main(String[] args) throws Exception  {    Thread thread = new ThreadInterrupt();    thread.start();    System.out.println("在50秒之内按任意键中断线程!");    System.in.read();    thread.interrupt();    thread.join();    System.out.println("线程已经退出!");   }  }
运行结果:
在50秒之内按任意键中断线程!
sleep interrupted
线程已经退出!
在调用interrupt方法后, sleep方法抛出异常,然后输出错误信息:sleep interrupted.
第二种情况示例代码:public class ThreadInterrupt extends Thread {   public void run() {   while (!isInterrupted()) {  //do something }}   public static void main(String[] args) throws Exception  {   Thread thread = new ThreadInterrupt();   thread.start();   thread.interrupt();   thread.join();   System.out.println("线程已经退出!"); }    }
注意:在Thread类中有两个方法可以判断线程是否通过interrupt方法被终止。一个是静态的方法interrupted(),一个是非静态的方法isInterrupted(),这两个方法的区别是interrupted用来判断当前线是否被中断,而isInterrupted可以用来判断其他线程是否被中断。因此,while (!isInterrupted())也可以换成while (!Thread.interrupted())。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程