当前位置: 首页 > 后端技术 > Java

[Java面试]如何中断正在运行的线程?

时间:2023-04-01 18:26:20 Java

一个去京东面试,工作了5年的粉丝来找我说:Mic老师,你说并发编程很重要。果不其然,今天又被一道并发编程的面试题给挂了。我问他有什么问题,他说:“如何中断正在运行的线程?”。我说很多工作2年的人都知道这个问题~好吧,对于这个问题,我们来看看普通人和高手的回答。普通人:嗯。..........师父:这个问题我从几个方面来回答。首先,线程是一个系统级的概念。Java实现的线程最终的执行和调度是由操作系统决定的。JVM只是在操作系统级别包装线程。所以我们在Java中通过start方法启动一个线程只是告诉操作系统该线程可以执行了,但是最终交由CPU执行是由操作系统的调度算法决定的。因此,理论上,要在Java层面中断一个正在运行的线程,只能强制终止,就像Linux中的kill命令一样,结束进程。因此JavaThread提供了stop方法强制终止,但是这种方法并不安全,因为有可能线程的任务还没有完成,导致运行结果不正确。如果想安全地中断一个正在运行的线程,只能在线程内部埋一个钩子,外部程序可以通过这个钩子触发线程的中断命令。因此JavaThread中提供了一个interrupt()方法,可以与isInterrupted()方法结合使用,实现安全的中断机制。这种实现方式并没有强制中断,而是告诉正在运行的线程你可以停止,但是是否中断取决于正在运行的线程,所以可以保证线程运行结果的安全。以上是我对这个问题的理解!总结这个问题,很多工作5年以上的朋友可能不太清楚。我想说的是,一味专注于CRUD的自动化重复性工作,除了前3年增长很多,后续的时间基本都是在做重复性工作。刚好是工作之外的8小时,才能拉开与他人的差距。觉得作品不错记得点赞关注哦。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!