Thread类的Stop()方法和Interrupt()方法到底有何区别?

开发 前端
Stop()方法会真的杀死线程。如果线程持有ReentrantLock锁,被stop()的线程并不会自动调用ReentrantLock的unlock()去释放锁,那其他线程就再也没机会获得ReentrantLock锁, 这样其他线程就再也不能执行ReentrantLock锁锁住的代码逻辑。

大家好,我是冰河~~

最近,很多小伙伴纷纷留言说今年的面试题难度又提高了,尤其是对并发编程的知识。我细想了下,也许有那么点大环境的原因吧,但无论面试的套路怎么变,只要掌握了核心知识和底层原理,找一份比较好的工作应该不难吧。玩笑归玩笑,学习知识并不只是为了应付面试,更应该将这些知识运用到实际的工作中。

朋友面试挂了

一个工作了几年的朋友今天打电话和我聊天,说前段时间出去面试,面试官问他做过的项目,他讲起业务来那是头头是道,犹如滔滔江水连绵不绝,可面试官最后问了一个问题:Thread类的stop()方法和interrupt方法有啥区别。这一问不要紧,当场把那个朋友打懵了!结果可想而知。。。

图片

事后,我也是感慨颇多,哎,不多说了,今天就简单的说说Thread类的stop()方法和interrupt()方法到底有啥区别吧。借着这个机会,给大家推出一个《Java扫盲系列》专栏,希望对大家有所帮助。

stop()方法

stop()方法会真的杀死线程。如果线程持有ReentrantLock锁,被stop()的线程并不会自动调用ReentrantLock的unlock()去释放锁,那其他线程就再也没机会获得ReentrantLock锁, 这样其他线程就再也不能执行ReentrantLock锁锁住的代码逻辑。所以该方法就不建议使用了, 类似的方法还有suspend()和resume()方法, 这两个方法同样也都不建议使用了, 所以这里也就不多介绍了。

interrupt()方法

interrupt()方法仅仅是通知线程,线程有机会执行一些后续操作,同时也可以无视这个通知。被interrupt的线程,有两种方式接收通知:一种是异常, 另一种是主动检测。

通过异常接收通知

当线程A处于WAITING、 TIMED_WAITING状态时, 如果其他线程调用线程A的interrupt()方法,则会使线程A返回到RUNNABLE状态,同时线程A的代码会触发InterruptedException异常。线程转换到WAITING、TIMED_WAITING状态的触发条件,都是调用了类似wait()、join()、sleep()这样的方法, 我们看这些方法的签名时,发现都会throws InterruptedException这个异常。这个异常的触发条件就是:其他线程调用了该线程的interrupt()方法。

当线程A处于RUNNABLE状态时,并且阻塞在java.nio.channels.InterruptibleChannel上时, 如果其他线程调用线程A的interrupt()方法,线程A会触发java.nio.channels.ClosedByInterruptException这个异常;当阻塞在java.nio.channels.Selector上 时,如果其他线程调用线程A的interrupt()方法,线程A的java.nio.channels.Selector会立即返回。

主动检测通知

如果线程处于RUNNABLE状态,并且没有阻塞在某个I/O操作上,例如中断计算基因组序列的线程A,此时就得依赖线程A主动检测中断状态了。如果其他线程调用线程A的interrupt()方法, 那么线程A可以通过isInterrupted()方法, 来检测自己是不是被中断了。

这些知识点你学会了吗?

进阶提升

如果你想进一步提升自己,可以加入冰河的知识星球,这里不仅能学到硬核技术,还会带你从零研发各种高并发、高性能和可扩展的中间件,只有进大厂才会接触到的高并发、高性能和可扩展的项目,加入星球,你将获得:

1.项目学习:微服务入门必备的SpringCloud  Alibaba实战项目、手写RPC项目—所有大厂都需要的项目【含上百个经典面试题】、深度解析Spring6核心技术—只要学习Java就必须深度掌握的框架【含数十个经典思考题】、Seckill秒杀系统项目—进大厂必备高并发、高性能和高可用技能。

2.框架源码:手写RPC项目—所有大厂都需要的项目【含上百个经典面试题】、深度解析Spring6核心技术—只要学习Java就必须深度掌握的框架【含数十个经典思考题】。

3.硬核技术:深入理解高并发系列(全册)、深入理解JVM系列(全册)、深入浅出Java设计模式(全册)、MySQL核心知识(全册)。

4.技术小册:深入理解高并发编程(第1版)、深入理解高并发编程(第2版)、从零开始手写RPC框架、SpringCloud  Alibaba实战、冰河的渗透实战笔记、MySQL核心知识手册、Spring IOC核心技术、Nginx核心技术、面经手册等。

5.技术与就业指导:提供相关就业辅导和未来发展指引,冰河从初级程序员不断沉淀,成长,突破,一路成长为互联网资深技术专家,相信我的经历和经验对你有所帮助。

责任编辑:姜华 来源: 冰河技术
相关推荐

2019-01-28 21:10:49

2020-07-31 12:52:40

OLEDQLEDMicroLED

2018-08-08 09:50:36

2018-08-21 22:12:50

2023-06-26 07:39:10

2021-09-06 10:45:18

XDRMDR

2024-02-26 07:36:09

lockJava语言

2020-10-19 13:03:16

Java 8接口抽象类

2021-12-31 09:23:22

SDNSD-WAN网络技术

2022-10-27 19:32:20

切片golang数组

2015-09-07 14:31:33

云计算SDNNFV

2023-07-19 21:54:02

小区扇区信号

2021-07-27 22:30:15

Windows 11Windows微软

2012-07-25 15:45:28

ERPSCM

2022-09-14 09:45:15

指标标签

2019-04-23 08:23:51

统计学机器学习人工智能

2019-09-20 18:35:22

OracleMySQL数据库

2020-07-17 11:28:24

App信息泄露个人信息

2020-08-19 08:10:11

数据分析技术IT

2015-02-13 10:24:51

微信
点赞
收藏

51CTO技术栈公众号