在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java中断线程的方法,更多Java专业知识,广州疯狂java培训为你讲解;

hread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃,使用它们是极端不安全的!

现在,如果你要安全有效地终止一个线程,应该采用以下这些方法:

1 线程正常执行完毕,正常结束。

也就是让run方法执行完毕,该线程就会正常结束。

2 监视某些条件,结束线程的不间断运行。

然而,常常有些线程是伺服线程。它们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。

通常,它们执行在一个while(true)的死循环中。

如:

publicvoid run() {

while(true){

someWork();

if(finished){

break;

}

try {

Thread.sleep(10000);

} catch (InterruptedException e) {

/* TODO自动生成 catch 块

*

*/

e.printStackTrace();

}

}

}

我们可以在while死循环内,每次循环时,察看外部条件,看看是否需要关闭当前线程。如果是,就break,跳出死循环,或者是抛出异常,跳出死循环,结束线程。

3 捕获InterruptedException 运行时异常,中断当前线程。

有些执行伺服任务的线程,在while(true)这样的死循环内部,是一个阻塞中的方法。此时,就不能采用第二种方法了。因为,当该方法没有返回时,该线程一直处于阻塞当中,根本无法执行其他语句。

此时,就需要调用该线程的interrupt方法,产生一个InterruptedException运行时异常,是阻塞中的那个方法抛出这个异常,从而让我们有机会结束这个线程的执行。

如:

publicvoid run() {

while(true){

try {

// getSendMessages 是BlockingQueue类。它的take方法将会阻塞!

responseMessage = this.getSendMessages().take();

} catch (InterruptedException e1) {

thrownew RuntimeException();

//或者break;

}

someWork();

}

一个外部的Thread 对象 指向这个线程。 需要结束这个线程时,只需要调用thread对象的interrupt() 方法,就会在responseMessage = this.getSendMessages()。take();

这条语句中产生一个InterruptedException异常,从而结束该线程的阻塞状态,通过抛出异常,或者break跳出死循环,结束这个线程。

疯狂Java培训紧跟最前沿的技术潮流,采用的都是企业最真实的项目开发,培养学生的实践动手能力。技术在不断更新换代,在疯狂软件学院你能学到最前沿的Java技术,疯狂Java培训主要培养的是Java专业人才。学员毕业之后的代码量至少达到项目经理的水平。疯狂软件学院有完善的就业服务机制,学员毕业时,可以享受免费终身推荐就业服务。根据学员的特点和企业的要求,为学员推荐最合适的岗位。

java 线程中断的方法_Java中断线程的方法相关推荐

  1. java开启线程的方法_Java有几种方法开启线程?怎么实现带有返回值的线程?

    Java有几种方法开启线程?怎么实现带有返回值的线程? 发布时间:2020-05-22 11:20:08 来源:亿速云 阅读:238 作者:Leah Java有几种方法开启线程?怎么实现带有返回值的线 ...

  2. java 创建线程的三种方法_java 创建线程的几种方式

    说道线程,肯定会想到使用 java.lang.Thread.java这个类 那么创建线程也主要有2种方式 第一种方式: public class MyThread extends Thread { p ...

  3. java 线程池的使用_Java 使用线程池执行若干任务

    在执行一系列带有IO操作(例如下载文件),且互不相关的异步任务时,采用多线程可以很极大的提高运行效率.线程池包含了一系列的线程,并且可以管理这些线程.例如:创建线程,销毁线程等.本文将介绍如何使用Ja ...

  4. java中线程池的使用_Java中线程池的简单使用

    什么是线程池? 顾名思义线程池就是线程的容器 举个例子:在没有共享电源的年代,车站有5个人手机都没电且都没有带电源,这五个人想要给手机充电只能去车站的售货亭各花100块钱买一个移动电源:但是现在共享电 ...

  5. java一般方法有哪些方法有哪些方法_Java代码优化有哪些方法?

    Java代码优化是Java编程开发很重要的一个步骤,Java代码优化要注重细节优化,一个两个的细节的优化,产生的效果不大,但是如果处处都能注意代码优化,对代码减少体积.提高代码运行效率是有巨大帮助的, ...

  6. java finalize 何时被调用_Java禁止使用finalize方法

    什么是finalize方法 finalize()方法被定义在Java.lang.Object类中,意味着所有的类都可以重载这个方法.java垃圾回收器只之道释放那些经由new分配的内存,所以如果你的对 ...

  7. java 同类调用方法_JAVA中同类中方法的调用问题?

    1.为什么可以直接new+构造方法,来创建对象.而不用创建实例引用呢,像常见的这种:Car car1=new Car;我记得看过有说java中没有被引用的对象将被GC处理.那这个算不算. 你创建了一个 ...

  8. java的默认值规则_Java 8:默认方法解析规则

    java的默认值规则 随着Java 8中默认方法的引入,一个类现在可以从多个位置(例如另一个类或接口)继承相同的方法. 在这种情况下,可以使用以下规则来确定选择哪种方法: 类或超类方法声明始终优先于默 ...

  9. java tostring方法_Java虚拟机如执行方法调用的(二)?

    虚方法调用 Java里所有非私有实例方法调用都会被编译成invokevirtual指令. 接口方法调用都会被编译成invokeinterface指令.这两种指令都属于Java虚方法的调用. 在大多数情 ...

  10. java 反射调用set方法_java反射调用set方法时如果让参数做自动类型转换

    这段时间学习java的反射机制想实现一个功能:遍历一个Map,然后利用反射机制调用BO的set方法,完成BO属性的自动注入.这样设计的初衷是解决Excel数据导入问题中的Map数据填充BO这一过程. ...

最新文章

  1. 【教程】Python数据可视化技巧
  2. ASP.NET Get和Post两种提交的区别
  3. 疯狂python讲义视频 百度云-疯狂Python讲义 PDF高清版附源码
  4. 添加全局函数$.extend和对象方法$.fn
  5. 说说计算机发展史在你的印象里都有哪些内容,鱼池宣讲 | 专题采访 第二期 | 过去的一年里,你印象深刻的事情有哪些?...
  6. windows下手把手教你捕获数据包
  7. 两张表的笛卡尔积用sql语句
  8. 二进制函数_Go二进制文件逆向分析从基础到进阶——MetaInfo、函数符号和源码文件路径列表...
  9. eclipse 项目 链接 oracle 空指针,Eclipse 常用配置技巧
  10. docker容器之RabbitMQ
  11. 博阅电纸书_【博阅电纸书】博阅 M1 柠檬电纸书阅读器评测,博阅T62电纸书评测_什么值得买...
  12. 10个实战及面试常用Linux Shell脚本编写
  13. Slam中几种变换的理解
  14. 一般描绘性形容词_英语中描绘性形容词是指哪种形容词?
  15. Linux如何固定ip地址,及ifcfg-ens33文件参数
  16. WordPress评论摘要标签:comment_excerpt
  17. Torch常用函数详解
  18. 工信部确定5G使用频段 产业链即将迎来变革
  19. Skype for Business 中的键盘快捷方式
  20. Oracle RMAN 的 show,list,crosscheck,delete命令整理

热门文章

  1. 《软件构架实践》10-12章读后感
  2. Java ArrayList 数组之间相互转换
  3. php函数 call_user_func
  4. JSON 之 SuperObject(8): 关于乱码的几种情况 - 向 Henri Gourvest 大师报告
  5. 当债务危机遇上限贷放松 房价投资价值大不如前
  6. 拓端tecdat|R语言如何和何时使用glmnet岭回归
  7. Linux下监测GPU温度指令
  8. (5)数据结构-栈顺序存储
  9. asscalar()函数
  10. 【Caffe代码解析】Layer网络层