来自:冰河技术

写在前面

新一轮的面试已经过去,可能是疫情的原因吧,很多童鞋纷纷留言说今年的面试题难度又提高了,尤其是对并发编程的知识。我细想了下,也许有那么点疫情的原因吧,但无论面试的套路怎么变,只要掌握了核心知识和底层原理,吊打面试官应该不难吧。玩笑归玩笑,学习知识并不只是为了应付面试,更应该将这些知识运用到实际的工作中。

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

事后,我也是感慨颇多,现在的程序员只知道做些简单的CRUD吗?哎,不多说了,今天就简单的说说Thread类的stop()方法和interrupt()方法到底有啥区别吧!

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()方法, 来检测自己是不是被中断了。

最后,附上并发编程需要掌握的核心技能知识图,祝大家在学习并发编程时,少走弯路。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!相关推荐

  1. 据说有人面试栽在了Thread类的stop()方法和interrupt()方法上

    摘要:今天就简单的说说Thread类的stop()方法和interrupt()方法到底有啥区别. 本文分享自华为云社区<[高并发]又一个朋友面试栽在了Thread类的stop()方法和inter ...

  2. 并发基础篇(六):线程Thread类的start()方法和run()方法

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...

  3. charAt()方法和charCodeAt()方法—— 从字符串中选取一个字符.

    charAt() 方法和charCodeAt () 方法用于选取字符串中某一位置上的单个字符.对于检查用户输入的有效性 ,这两个方法也是非常有用的. charAt() 方法具有一个参数 :即所选取字符 ...

  4. Java 回调函数(传统方法和lambda方法)-一个例子秒懂

    原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地 ...

  5. 【高并发】一个工作了7年的朋友去面试竟然被Thread类虐的体无完肤

    前言 最近和一个工作了7年的朋友聊天,他跟我说起了他去XXX公司面试的情况,面试官的一个问题把他打懵了!竟然问他:你经常使用Thread类创建线程,那你看过Thread类的源码吗?Thread类创建线 ...

  6. 《重学Java高并发》你管这“破玩意儿”叫锁(没有高并发经验的朋友们看过来,该专栏结合笔者的实战来讲高并发)

    专栏特色:结合10余年的工作经验,在实践中提炼总结高并发经验,将理论落到实处,不仅助力面试,更是真正提高技能. 专栏目录: <重学Java高并发>Sempahore的使用场景与常见误区 & ...

  7. Java高并发和多线程的面试笔试题——稳拿offer

    1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...

  8. “了解高并发底层原理”,面试官:讲一下MESI(缓存一致性协议)吧

    目录 前言: 1.什么是(Who): 2.为何来(How): 2.1缓存不一致带来的后果 2.2解决方法: 3.是什么(What) 3.1数据在缓存中的四种状态: 3.2MESI的六种消息(请求消息和 ...

  9. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

最新文章

  1. 报名 | “AI Time”系列论道知识图谱:知识赋能智能与智能产生知识
  2. CvSVM::EPS_SVR train_auto assertion sv_count != 0 failed原因
  3. 如何将文件复制到虚拟机中
  4. 赞!这样构建微服务架构,实在是太轻松了!
  5. java 解析 jar_解析java中对jar包进行再次修改
  6. java web.xml_Java Web之XML基础
  7. python创建多线程_初学者看过来:Python中多线程和多处理的指南
  8. PSP自制系统3.xxOE相关内容
  9. 音视频开发进阶指南--音视频概念基础
  10. Java21天打卡Day6-switch
  11. 【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟
  12. 微信支付商户证书cert.zip中确实rootca.pem文件解决方法
  13. 用matlab对图像进行二维傅里叶变换
  14. 计算机学win7画图,Windows7系统画图工具怎么打开?
  15. php极光推送获取cid返回404错误,极光推送心得
  16. lae界面开发工具入门之介绍四--秘籍篇-拷贝粘贴
  17. 10月11日科技联播:美股暴跌引全球股市崩盘;腾讯跌出全球市值前十
  18. ActiveMQ应用笔记四:Ajax应用
  19. 非常详细的FastDFS整合springBoot教程-带文件下载地址
  20. execl筛选去重_Excel中表格筛选去重复项的操作方法

热门文章

  1. PTA数据结构与算法题目集(中文)7-14
  2. 渡神纪帧数测试软件,渡神纪芬尼斯崛起配置要求高吗 渡神纪配置要求详细介绍_游侠网...
  3. 学习python一开始枯燥_编程零基础应当怎样开始学python?他说,看这三个经典方法...
  4. 求合体电脑版_SCP CB 电脑移植版测评
  5. 春泥棒(偷春人) — ヨルシカ(MV + 歌词、汉译、罗马音)
  6. 解题报告:luogu P1688 新单词接龙问题【trie树、dfs、DP递推】
  7. N - Find a way HDU - 2612
  8. K - 迷宫问题 POJ - 3984
  9. html百度转到顶部 fixed,科技常识:完美解决安卓端百度浏览器屏蔽fixed悬浮元素的问题...
  10. c语言俄罗斯方块注释,C语言学习1年-俄罗斯方块(无注释)