JAVA中有3种方式可以终止正在运行的线程

①线程正常退出,即run()方法执行完毕了

②使用Thread类中的stop()方法强行终止线程。但stop()方法已经过期了,不推荐使用

③使用中断机制interrupt()

1.stop()方法

stop()在java多线程中已经废弃

1.stop()方法会导致释放锁的不良后果,数据不完整

比如一个上锁了得方法:

threadA线程拥有了监视器,这些监视器负责保护某些临界资源,比如说银行的转账的金额。当正在转账过程中,main线程调用 threadA.stop()方法或者this.stop()。结果导致监视器被释放,其保护的资源(转账金额)很可能出现不一致性。比如,A账户减少了100,而B账户却没有增加100,没有保证数据原子性

2.当线程调用stop()方法时,会立刻终止线程的所有操作,并抛出ThreadDeath异常,通常不需要捕捉

2.interrupt() 中断机制

这个方法是实例方法 ,但是它不会真的中断一个正在运行的线程,而是给线程打一个停止的标记,还需要配合判断来优雅的终止线程

运行代码

输出结果

可以看的出来  ,interrupt() 并不会真正的停止正在运行的线程,那么如何停止线程呢

3.判断线程的停止状态

interrupted()方法与 isInterrupted()方法能反映当前线程的终止状态

看的出来 interrupted() 是静态方法 而isInterrupted() 是实例方法

1.interrupted()方法

可以从上面看出 interrupt()执行了线程interrupted() 方法 第一调用返回是true , 第二次调用返回时false,在这里查看interrupted()的源码发现该方法会清楚中断状态

publicbooleanisInterrupted(){

returnisInterrupted(false);

}

/**

* Tests if some Thread has been interrupted. The interrupted state

* is reset or not based on the value of ClearInterrupted that is

* passed.

*/

privatenativebooleanisInterrupted(booleanClearInterrupted);

源码发现该方法interrupted() 会调用isInterrupted 方法 传入 参数clean 状态,调用改方法,改方法内部会清除中断状态

2.isInterrupted()方法

继续根据上面的示例创建 Run3

总结了两个判断线程中断的区别  , 下面开始优雅的中断线程了

java线程 stop()_java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())...相关推荐

  1. java中什么是线程安全_Java 多线程:什么是线程安全性

    线程安全性 什么是线程安全性 <Java Concurrency In Practice>一书的作者 Brian Goetz 是这样描述"线程安全"的:"当多 ...

  2. java 线程通讯_java多线程(五)线程通讯

    1.1. 为什么要线程通信 多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信. 1.2. 线程通讯方式 线程间通信常用方式如下 ...

  3. java线程组 线程池_JAVA多线程(三)-----线程组、线程池和线程相关类

    一.线程组和未处理的异常 Thread类提供了如下几个构造器来设置新创建的线程属于哪个线程组: Thread(ThreadGroup group,Runnable target):以target的ru ...

  4. java 两个线程同步_Java 多线程(二)—— 线程的同步

    实现Runnable接口 public classTestThread2 {public static voidmain(String [] args){ Window window=newWindo ...

  5. java new 多线程_Java多线程:Java多线程执行框架

    为什么需要执行框架呢? 使用一般的new方法来创建线程有什么问题呢?一般的new线程的方式一般要给出一个实现了Runnable接口的执行类,在其中重写run()方法,然后再在将这个执行类的对象传给线程 ...

  6. java闭合数据_java多线程中线程封闭详解

    线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...

  7. java线程 教程_Java多线程系列教程

    Java多线程系列教程 多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容是对Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), n ...

  8. java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...

    线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...

  9. java线程名_java多线程

    首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈 ...

最新文章

  1. linux shell 调试 检查 脚本
  2. 第100天:CSS3中animation动画详解
  3. Oracle数字函数:数字四舍五入,取整以及格式化
  4. python正则表达式面试_【剑指offer】面试题19. 正则表达式匹配
  5. String是一个奇怪的引用类型
  6. ArcGIS地图服务发布,注记乱码
  7. 华为Mate30、iPhone11、小米9 Pro 到底怎么选?
  8. 火狐 firefox proxy moz=proxy:// 407错误 解决办法
  9. 2D纹理与3D模型共存时的渲染问题
  10. 【C语言】俄罗斯方块的源代码
  11. 云智推任务提交版拉新系统源码-任务分销系统
  12. Kvaser、C++、Qt编写监控界面(三)
  13. numpy 随机生成矩阵
  14. B. Dubious Cyrpto(思维+枚举)
  15. java中retry的使用
  16. linux系统vi光标移动字符,Linux vi中移动光标命令
  17. dota2大魔导师出装java_DOTA2酱油大魔导师拉比克加点出装攻略
  18. MySql排序并查询排名
  19. ANR 弹窗的显示原理
  20. 【Python】Matplotlib绘制折线图

热门文章

  1. linux rawsocket java_linux下RAW SOCKET--转
  2. 【BZOJ】1756: Vijos1083 小白逛公园(线段树)
  3. 正则表达式实现身份证信息验证
  4. Effective C++: 05实现
  5. 老司机找bug的心路历程
  6. 初创企业融资应量力而行
  7. 硬盘常规测试软件解析
  8. POJ 1953 (DP)
  9. 直播预告 | 视觉SLAM在AR应用上的关键性问题探讨
  10. MIT 深度学习导论来啦!附视频下载