java线程 stop()_java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())...
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())...相关推荐
- java中什么是线程安全_Java 多线程:什么是线程安全性
线程安全性 什么是线程安全性 <Java Concurrency In Practice>一书的作者 Brian Goetz 是这样描述"线程安全"的:"当多 ...
- java 线程通讯_java多线程(五)线程通讯
1.1. 为什么要线程通信 多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信. 1.2. 线程通讯方式 线程间通信常用方式如下 ...
- java线程组 线程池_JAVA多线程(三)-----线程组、线程池和线程相关类
一.线程组和未处理的异常 Thread类提供了如下几个构造器来设置新创建的线程属于哪个线程组: Thread(ThreadGroup group,Runnable target):以target的ru ...
- java 两个线程同步_Java 多线程(二)—— 线程的同步
实现Runnable接口 public classTestThread2 {public static voidmain(String [] args){ Window window=newWindo ...
- java new 多线程_Java多线程:Java多线程执行框架
为什么需要执行框架呢? 使用一般的new方法来创建线程有什么问题呢?一般的new线程的方式一般要给出一个实现了Runnable接口的执行类,在其中重写run()方法,然后再在将这个执行类的对象传给线程 ...
- java闭合数据_java多线程中线程封闭详解
线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...
- java线程 教程_Java多线程系列教程
Java多线程系列教程 多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容是对Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), n ...
- java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...
线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...
- java线程名_java多线程
首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈 ...
最新文章
- linux shell 调试 检查 脚本
- 第100天:CSS3中animation动画详解
- Oracle数字函数:数字四舍五入,取整以及格式化
- python正则表达式面试_【剑指offer】面试题19. 正则表达式匹配
- String是一个奇怪的引用类型
- ArcGIS地图服务发布,注记乱码
- 华为Mate30、iPhone11、小米9 Pro 到底怎么选?
- 火狐 firefox proxy moz=proxy:// 407错误 解决办法
- 2D纹理与3D模型共存时的渲染问题
- 【C语言】俄罗斯方块的源代码
- 云智推任务提交版拉新系统源码-任务分销系统
- Kvaser、C++、Qt编写监控界面(三)
- numpy 随机生成矩阵
- B. Dubious Cyrpto(思维+枚举)
- java中retry的使用
- linux系统vi光标移动字符,Linux vi中移动光标命令
- dota2大魔导师出装java_DOTA2酱油大魔导师拉比克加点出装攻略
- MySql排序并查询排名
- ANR 弹窗的显示原理
- 【Python】Matplotlib绘制折线图