一个去京东面试的工作了 5 年的粉丝来找我说:
Mic 老师,你说并发编程很重要,果然我明天又挂在一道并发编程的面试题上了。
我问他问题是什么,他说:”如何中断一个正在运行中的线程?“。
我说这个问题很多工作 2 年的人都晓得~
好吧,对于这个问题,来看看普通人和高手的答复。
普通人:
嗯。。。。。。。。。。。
高手:
对于这个问题,我从几个方面来答复。
首先,线程是零碎级别的概念,在 Java 外面实现的线程,最终的执行和调度都是由操作系统来决定的,JVM 只是对操作系统层面的线程做了一层包装而已。
所以咱们在 Java 外面通过 start 办法启动一个线程的时候,只是通知操作系统这个线程能够被执行,然而最终交给 CPU 来执行是操作系统的调度算法来决定的。
因而,实践上来说,要在 Java 层面去中断一个正在运行的线程,只能像相似于 Linux 外面的 kill 命令完结过程的形式一样,强制终止。
所以,Java Thread 外面提供了一个 stop 办法能够强行终止,然而这种形式是不平安的,因为有可能线程的工作还没有,导致呈现运行后果不正确的问题。
要想平安的中断一个正在运行的线程,只能在线程外部埋下一个钩子,内部程序通过这个钩子来触发线程的中断命令。
因而,在 Java Thread 外面提供了一个 interrupt()办法,这个办法配合 isInterrupted()办法应用,就能够实现平安的中断机制。
这种实现办法并不是强制中断,而是通知正在运行的线程,你能够进行了,不过是否要中断,取决于正在运行的线程,所以它可能保障线程运行后果的安全性。
以上就是我对这个问题的了解!
总结
这个问题,很多工作了 5 年以上的小伙伴都不肯定分明。
我想说的是,一味的专一在 CRUD 这种自动化的重复性工作中除了后面 3 年工夫会有很多的成长以外,后续的工夫基本上就是在做反复的劳动。
和他人拉开差距恰好是工作之外的 8 个小时。
如果感觉作品不错,记得点赞和关注。
版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自
Mic 带你学架构
!
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!