大厂面试题-如何中断一个正在运行的线程

2023-12-30 20:26:11

目录

问题解答

面试点评


问题解答

关于这个问题,从几个方面来回答

(如图)首先,线程是系统级别的概念,在Java里面实现的线程,最终的执行和调度都是由操作系统来决定的,JVM只是对操作系统层面的线程做了一层包装而已。

以我们在Java里面通过start方法启动一个线程的时候,只是告诉操作系统这个线程可以被执行,但是最终交给CPU来执行是操作系统的调度算法来决定的。

,理论上来说,要在Java层面去中断一个正在运行的线程,只能像类似于Linux里面kill命令结束进程的方式一样,强制终止。

所以,Java?Thread里面提供了一个stop方法可以强行终止,但是这种方式是不安全因为有可能线程的任务还没有,导致出现运行结果不正确的问题。

要想安全的中断一个正在运行的线程,只能在线程内部埋下一个钩子,外部程序通过这个钩子来触发线程的中断命令。

(如图)因此,在Java?Thread里面提供了一个interrupt()方法,这个方法配合isInterrupted()方法使用,就可以实现安全的中断机制。

这种实现方法并不是强制中断,而是告诉正在运行的线程,你可以停止了,不过是否要中断,取决于正在运行的线程,所以它能够保证线程运行结果的安全性。

面试点

这个问题,很多工作了5年以上的都不一定清楚。一味的专注在CRUD这种自动化的重复性工作中除了前面3年时间会有很多的成长以外,后续的时间基本上就是在做重复的劳动和别人拉开差距恰恰是工作之外的8个小时。

文章来源:https://blog.csdn.net/gnwu1111/article/details/135191581
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。