首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统挂起线程和中断线程有什么不同?

操作系统挂起线程和中断线程有什么不同?
EN

Stack Overflow用户
提问于 2021-02-26 21:21:55
回答 2查看 199关注 0票数 0

在Java语言中,我们可以调用interrupt()方法来中断线程,然后被中断的线程可以管理这个中断(通过捕获InterruptedException,或者在使用Thread.interrupted()检查之后)。

OS还可以挂起线程,例如,如果它想要切换到另一个线程。

挂起和中断是两个完全不同的操作吗?操作系统也能中断线程吗?

EN

回答 2

Stack Overflow用户

发布于 2021-02-26 21:49:35

是否挂起并中断了两个不同的操作?

正如您所描述的,是的,它们显然是截然不同的。一种发生在Java级别,另一种发生在操作系统级别。

也许您的意思是问Java线程中断是否是通过操作系统级线程挂起实现的,但同样不是。正如您已经定义的挂起,这是操作系统在CPU上调度不同线程时使用的机制。当挂起的线程恢复时,它将继续进行,就好像什么都没有发生一样。但Java线程中断的目的和效果是在被中断的线程中产生不同的行为。这不是一个调度操作,甚至与调度也没有太多关系。

操作系统还能中断线程吗?

Java使用底层的OS工具来实现线程中断,所以从这个意义上说,当然可以。但是OS本身没有任何Java级别的线程语义,而且它只知道Java线程本身是通过OS线程实现的。在不经过Java的情况下,没有本机工具可以可靠地或专门地执行Java线程中断。

票数 1
EN

Stack Overflow用户

发布于 2021-02-26 21:49:59

挂起和中断是完全相反的。Thread.interrupt()的全部目的是引起挂起的线程的注意,该线程正在等待某些东西。

Thread.interrupt()做了两件事;

  1. 它设置了线程可以检查的标志。Thread.currentThread.isInterrupted()

  1. 如果线程处于任何数量的不同库调用中,这些库调用将线程挂起以等待某些东西(例如,任何文件I/O调用、Thread.sleep()以及我不知道其他所有内容),则线程将恢复,并且库调用将抛出InterruptedException,而不是返回其通常的结果。

https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Thread.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66386578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档