在Java语言中,我们可以调用interrupt()方法来中断线程,然后被中断的线程可以管理这个中断(通过捕获InterruptedException,或者在使用Thread.interrupted()检查之后)。
OS还可以挂起线程,例如,如果它想要切换到另一个线程。
挂起和中断是两个完全不同的操作吗?操作系统也能中断线程吗?
发布于 2021-02-26 21:49:35
是否挂起并中断了两个不同的操作?
正如您所描述的,是的,它们显然是截然不同的。一种发生在Java级别,另一种发生在操作系统级别。
也许您的意思是问Java线程中断是否是通过操作系统级线程挂起实现的,但同样不是。正如您已经定义的挂起,这是操作系统在CPU上调度不同线程时使用的机制。当挂起的线程恢复时,它将继续进行,就好像什么都没有发生一样。但Java线程中断的目的和效果是在被中断的线程中产生不同的行为。这不是一个调度操作,甚至与调度也没有太多关系。
操作系统还能中断线程吗?
Java使用底层的OS工具来实现线程中断,所以从这个意义上说,当然可以。但是OS本身没有任何Java级别的线程语义,而且它只知道Java线程本身是通过OS线程实现的。在不经过Java的情况下,没有本机工具可以可靠地或专门地执行Java线程中断。
发布于 2021-02-26 21:49:59
挂起和中断是完全相反的。Thread.interrupt()的全部目的是引起挂起的线程的注意,该线程正在等待某些东西。
Thread.interrupt()做了两件事;
Thread.currentThread.isInterrupted()和Thread.sleep()以及我不知道其他所有内容),则线程将恢复,并且库调用将抛出InterruptedException,而不是返回其通常的结果。https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Thread.html
https://stackoverflow.com/questions/66386578
复制相似问题