多线程中interrupt的 两阶段终止模式

介绍

我们先思考一下,如果 一个线程正在运行中,我们如何 把该正在运行的线程终止运行,我们可以看到 在 线程api中 有 stop方法,或者 system的exit 方法,但是 这种 直接 终止的行为 不够优雅,而且太暴力,假如 有一个线程 再打断后 还需要 做一些 处理逻辑的话 ,那么用stop,或者 exit 方法 就不太合适了

就好像 我们 工作中 离职一样,我们是 直接被开除,什么都不管当天就走,还是 自己 开除的时候 办一些手续,显然被开除不太好 ,但是相对来说还是第二个 更加合理且负责一点

api

interrupt 字面意思打断,当我们 一个线程a 在运行过程中,我们运行线程a的该interrupt方法 可以 把 把正在 wait,sleep,或者 正在运行中的线程打断 ,但是  假如 线程a 正在 wait,sleep 的时候 被打断,这时候 会爆出打断异常并且重置打断条件,而正在运行中的线程被打断,则不会爆出异常并且 修改打断标记 为true

api代码

我们直接上代码观察结果,可以看到 直接爆出异常

而没有执行 wait 或者sleep的线程被打断 不会报出错误

我们可以看到 怎么 有一个 isInterrupted 方法, 这个就是 记录 打断的状态,如果 该线程调用过了 interrupt方法,那么 该 is 方法 就会 变为 true ,否则为false

两阶段终止

两段终止就是 根据 isinterrupted 的 条件 用循环重置,来进行两端终止的判断

运行结果为

该种线程结束的形式,就是让线程拥有处理后事的能力,而 我们在线程中 是怎么判断 这个打断标记呢?  就是 thread里面的一个成员变量

打断方法 会把该成员变量的状态变换成 true; 默认的是false;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三氧化真

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值