乐趣区

关于java:Java面试如何中断一个正在运行的线程

一个去京东面试的工作了 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 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

退出移动版